portacode 1.4.12.dev8__tar.gz → 1.4.13.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/PKG-INFO +1 -1
  2. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/_version.py +2 -2
  3. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/proxmox_infra.py +128 -21
  4. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode.egg-info/PKG-INFO +1 -1
  5. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/.claude/agents/communication-manager.md +0 -0
  6. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/.claude/settings.local.json +0 -0
  7. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/.gitignore +0 -0
  8. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/.gitmodules +0 -0
  9. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/LICENSE +0 -0
  10. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/MANIFEST.in +0 -0
  11. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/Makefile +0 -0
  12. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/README.md +0 -0
  13. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/backup.sh +0 -0
  14. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/connect.py +0 -0
  15. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/connect.sh +0 -0
  16. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/docker-compose.yaml +0 -0
  17. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/docs/images/device-transfer-button.png +0 -0
  18. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/docs/images/device-transfer-modal.png +0 -0
  19. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/docs/images/pair-device-button.png +0 -0
  20. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/docs/images/pairing-request.png +0 -0
  21. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/docs/images/student-workspace.png +0 -0
  22. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/README.md +0 -0
  23. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/simple_device/Dockerfile +0 -0
  24. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/simple_device/README.md +0 -0
  25. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/simple_device/data/device-01/.local/share/portacode/keys/id_portacode +0 -0
  26. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/simple_device/data/device-01/.local/share/portacode/keys/id_portacode.pub +0 -0
  27. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/simple_device/docker-compose.yaml +0 -0
  28. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/Dockerfile +0 -0
  29. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/README.md +0 -0
  30. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/.local/share/portacode/keys/id_portacode +0 -0
  31. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/.local/share/portacode/keys/id_portacode.pub +0 -0
  32. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/.local/share/portacode/run/gateway.pid +0 -0
  33. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/.gitignore +0 -0
  34. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/README.md +0 -0
  35. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/db.sqlite3 +0 -0
  36. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__init__.py +0 -0
  37. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/__init__.cpython-311.pyc +0 -0
  38. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/settings.cpython-311.pyc +0 -0
  39. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/urls.cpython-311.pyc +0 -0
  40. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/wsgi.cpython-311.pyc +0 -0
  41. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/asgi.py +0 -0
  42. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/settings.py +0 -0
  43. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/urls.py +0 -0
  44. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/wsgi.py +0 -0
  45. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/manage.py +0 -0
  46. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/requirements.txt +0 -0
  47. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/templates/treats/home.html +0 -0
  48. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__init__.py +0 -0
  49. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/__init__.cpython-311.pyc +0 -0
  50. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/admin.cpython-311.pyc +0 -0
  51. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/apps.cpython-311.pyc +0 -0
  52. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/menu.cpython-311.pyc +0 -0
  53. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/models.cpython-311.pyc +0 -0
  54. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/urls.cpython-311.pyc +0 -0
  55. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/views.cpython-311.pyc +0 -0
  56. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/admin.py +0 -0
  57. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/apps.py +0 -0
  58. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/menu.py +0 -0
  59. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/migrations/__init__.py +0 -0
  60. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/migrations/__pycache__/__init__.cpython-311.pyc +0 -0
  61. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/models.py +0 -0
  62. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/tests.py +0 -0
  63. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/urls.py +0 -0
  64. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/views.py +0 -0
  65. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/.local/share/portacode/keys/id_portacode +0 -0
  66. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/.local/share/portacode/keys/id_portacode.pub +0 -0
  67. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/README.md +0 -0
  68. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/__init__.py +0 -0
  69. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/asgi.py +0 -0
  70. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/settings.py +0 -0
  71. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/urls.py +0 -0
  72. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/wsgi.py +0 -0
  73. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/manage.py +0 -0
  74. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/requirements.txt +0 -0
  75. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/templates/treats/home.html +0 -0
  76. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/__init__.py +0 -0
  77. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/admin.py +0 -0
  78. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/apps.py +0 -0
  79. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/menu.py +0 -0
  80. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/migrations/__init__.py +0 -0
  81. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/models.py +0 -0
  82. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/tests.py +0 -0
  83. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/urls.py +0 -0
  84. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/views.py +0 -0
  85. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/.local/share/portacode/keys/id_portacode +0 -0
  86. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/.local/share/portacode/keys/id_portacode.pub +0 -0
  87. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/README.md +0 -0
  88. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/__init__.py +0 -0
  89. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/asgi.py +0 -0
  90. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/settings.py +0 -0
  91. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/urls.py +0 -0
  92. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/wsgi.py +0 -0
  93. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/manage.py +0 -0
  94. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/requirements.txt +0 -0
  95. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/templates/treats/home.html +0 -0
  96. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/__init__.py +0 -0
  97. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/admin.py +0 -0
  98. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/apps.py +0 -0
  99. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/menu.py +0 -0
  100. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/migrations/__init__.py +0 -0
  101. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/models.py +0 -0
  102. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/tests.py +0 -0
  103. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/urls.py +0 -0
  104. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/views.py +0 -0
  105. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/.local/share/portacode/keys/id_portacode +0 -0
  106. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/.local/share/portacode/keys/id_portacode.pub +0 -0
  107. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/README.md +0 -0
  108. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/__init__.py +0 -0
  109. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/asgi.py +0 -0
  110. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/settings.py +0 -0
  111. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/urls.py +0 -0
  112. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/wsgi.py +0 -0
  113. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/manage.py +0 -0
  114. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/requirements.txt +0 -0
  115. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/templates/treats/home.html +0 -0
  116. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/__init__.py +0 -0
  117. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/admin.py +0 -0
  118. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/apps.py +0 -0
  119. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/menu.py +0 -0
  120. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/migrations/__init__.py +0 -0
  121. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/models.py +0 -0
  122. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/tests.py +0 -0
  123. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/urls.py +0 -0
  124. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/views.py +0 -0
  125. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/.local/share/portacode/keys/id_portacode +0 -0
  126. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/.local/share/portacode/keys/id_portacode.pub +0 -0
  127. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/README.md +0 -0
  128. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/__init__.py +0 -0
  129. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/asgi.py +0 -0
  130. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/settings.py +0 -0
  131. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/urls.py +0 -0
  132. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/wsgi.py +0 -0
  133. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/manage.py +0 -0
  134. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/requirements.txt +0 -0
  135. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/templates/treats/home.html +0 -0
  136. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/__init__.py +0 -0
  137. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/admin.py +0 -0
  138. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/apps.py +0 -0
  139. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/menu.py +0 -0
  140. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/migrations/__init__.py +0 -0
  141. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/models.py +0 -0
  142. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/tests.py +0 -0
  143. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/urls.py +0 -0
  144. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/views.py +0 -0
  145. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/.local/share/portacode/keys/id_portacode +0 -0
  146. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/.local/share/portacode/keys/id_portacode.pub +0 -0
  147. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/README.md +0 -0
  148. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/__init__.py +0 -0
  149. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/asgi.py +0 -0
  150. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/settings.py +0 -0
  151. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/urls.py +0 -0
  152. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/wsgi.py +0 -0
  153. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/manage.py +0 -0
  154. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/requirements.txt +0 -0
  155. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/templates/treats/home.html +0 -0
  156. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/__init__.py +0 -0
  157. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/admin.py +0 -0
  158. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/apps.py +0 -0
  159. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/menu.py +0 -0
  160. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/migrations/__init__.py +0 -0
  161. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/models.py +0 -0
  162. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/tests.py +0 -0
  163. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/urls.py +0 -0
  164. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/views.py +0 -0
  165. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/.local/share/portacode/keys/id_portacode +0 -0
  166. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/.local/share/portacode/keys/id_portacode.pub +0 -0
  167. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/README.md +0 -0
  168. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/__init__.py +0 -0
  169. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/asgi.py +0 -0
  170. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/settings.py +0 -0
  171. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/urls.py +0 -0
  172. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/wsgi.py +0 -0
  173. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/manage.py +0 -0
  174. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/requirements.txt +0 -0
  175. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/templates/treats/home.html +0 -0
  176. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/__init__.py +0 -0
  177. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/admin.py +0 -0
  178. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/apps.py +0 -0
  179. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/menu.py +0 -0
  180. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/migrations/__init__.py +0 -0
  181. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/models.py +0 -0
  182. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/tests.py +0 -0
  183. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/urls.py +0 -0
  184. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/views.py +0 -0
  185. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/.local/share/portacode/keys/id_portacode +0 -0
  186. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/.local/share/portacode/keys/id_portacode.pub +0 -0
  187. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/README.md +0 -0
  188. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/__init__.py +0 -0
  189. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/asgi.py +0 -0
  190. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/settings.py +0 -0
  191. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/urls.py +0 -0
  192. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/wsgi.py +0 -0
  193. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/manage.py +0 -0
  194. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/requirements.txt +0 -0
  195. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/templates/treats/home.html +0 -0
  196. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/__init__.py +0 -0
  197. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/admin.py +0 -0
  198. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/apps.py +0 -0
  199. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/menu.py +0 -0
  200. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/migrations/__init__.py +0 -0
  201. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/models.py +0 -0
  202. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/tests.py +0 -0
  203. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/urls.py +0 -0
  204. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/views.py +0 -0
  205. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/.local/share/portacode/keys/id_portacode +0 -0
  206. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/.local/share/portacode/keys/id_portacode.pub +0 -0
  207. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/README.md +0 -0
  208. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/__init__.py +0 -0
  209. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/asgi.py +0 -0
  210. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/settings.py +0 -0
  211. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/urls.py +0 -0
  212. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/wsgi.py +0 -0
  213. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/manage.py +0 -0
  214. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/requirements.txt +0 -0
  215. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/templates/treats/home.html +0 -0
  216. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/__init__.py +0 -0
  217. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/admin.py +0 -0
  218. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/apps.py +0 -0
  219. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/menu.py +0 -0
  220. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/migrations/__init__.py +0 -0
  221. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/models.py +0 -0
  222. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/tests.py +0 -0
  223. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/urls.py +0 -0
  224. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/views.py +0 -0
  225. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/.local/share/portacode/keys/id_portacode +0 -0
  226. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/.local/share/portacode/keys/id_portacode.pub +0 -0
  227. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/README.md +0 -0
  228. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/__init__.py +0 -0
  229. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/asgi.py +0 -0
  230. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/settings.py +0 -0
  231. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/urls.py +0 -0
  232. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/wsgi.py +0 -0
  233. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/manage.py +0 -0
  234. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/requirements.txt +0 -0
  235. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/templates/treats/home.html +0 -0
  236. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/__init__.py +0 -0
  237. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/admin.py +0 -0
  238. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/apps.py +0 -0
  239. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/menu.py +0 -0
  240. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/migrations/__init__.py +0 -0
  241. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/models.py +0 -0
  242. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/tests.py +0 -0
  243. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/urls.py +0 -0
  244. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/views.py +0 -0
  245. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/docker-compose.yaml +0 -0
  246. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/README.md +0 -0
  247. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/__init__.py +0 -0
  248. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/asgi.py +0 -0
  249. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/settings.py +0 -0
  250. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/urls.py +0 -0
  251. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/wsgi.py +0 -0
  252. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/manage.py +0 -0
  253. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/requirements.txt +0 -0
  254. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/templates/treats/home.html +0 -0
  255. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/__init__.py +0 -0
  256. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/admin.py +0 -0
  257. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/apps.py +0 -0
  258. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/menu.py +0 -0
  259. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/migrations/__init__.py +0 -0
  260. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/models.py +0 -0
  261. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/tests.py +0 -0
  262. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/urls.py +0 -0
  263. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/views.py +0 -0
  264. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/instructions/WELCOME.md +0 -0
  265. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/README.md +0 -0
  266. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/__init__.py +0 -0
  267. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/__main__.py +0 -0
  268. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/cli.py +0 -0
  269. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/README.md +0 -0
  270. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/__init__.py +0 -0
  271. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/client.py +0 -0
  272. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/README.md +0 -0
  273. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/WEBSOCKET_PROTOCOL.md +0 -0
  274. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/__init__.py +0 -0
  275. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/base.py +0 -0
  276. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/chunked_content.py +0 -0
  277. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/diff_handlers.py +0 -0
  278. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/file_handlers.py +0 -0
  279. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_aware_file_handlers.py +0 -0
  280. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/README.md +0 -0
  281. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/__init__.py +0 -0
  282. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/file_system_watcher.py +0 -0
  283. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/git_manager.py +0 -0
  284. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/handlers.py +0 -0
  285. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/manager.py +0 -0
  286. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/models.py +0 -0
  287. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/utils.py +0 -0
  288. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state_handlers.py +0 -0
  289. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/registry.py +0 -0
  290. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/session.py +0 -0
  291. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/system_handlers.py +0 -0
  292. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/tab_factory.py +0 -0
  293. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/terminal_handlers.py +0 -0
  294. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/update_handler.py +0 -0
  295. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/multiplex.py +0 -0
  296. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/terminal.py +0 -0
  297. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/data.py +0 -0
  298. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/keypair.py +0 -0
  299. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/__init__.py +0 -0
  300. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/__pycache__/__init__.cpython-311.pyc +0 -0
  301. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/__pycache__/link_capture_wrapper.cpython-311.pyc +0 -0
  302. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/elinks +0 -0
  303. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/gio-open +0 -0
  304. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/gnome-open +0 -0
  305. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/gvfs-open +0 -0
  306. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/kde-open +0 -0
  307. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/kfmclient +0 -0
  308. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/link_capture_exec.sh +0 -0
  309. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/link_capture_wrapper.py +0 -0
  310. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/links +0 -0
  311. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/links2 +0 -0
  312. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/lynx +0 -0
  313. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/mate-open +0 -0
  314. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/netsurf +0 -0
  315. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/sensible-browser +0 -0
  316. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/w3m +0 -0
  317. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/x-www-browser +0 -0
  318. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/xdg-open +0 -0
  319. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/logging_categories.py +0 -0
  320. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/pairing.py +0 -0
  321. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/service.py +0 -0
  322. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/static/js/test-ntp-clock.html +0 -0
  323. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/static/js/utils/ntp-clock.js +0 -0
  324. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/utils/NTP_ARCHITECTURE.md +0 -0
  325. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/utils/__init__.py +0 -0
  326. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/utils/diff_apply.py +0 -0
  327. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/utils/diff_renderer.py +0 -0
  328. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/utils/ntp_clock.py +0 -0
  329. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode.egg-info/SOURCES.txt +0 -0
  330. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode.egg-info/dependency_links.txt +0 -0
  331. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode.egg-info/entry_points.txt +0 -0
  332. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode.egg-info/requires.txt +0 -0
  333. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode.egg-info/top_level.txt +0 -0
  334. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/pyproject.toml +0 -0
  335. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/restore.sh +0 -0
  336. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/run_tests.py +0 -0
  337. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/setup.cfg +0 -0
  338. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/setup.py +0 -0
  339. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test.sh +0 -0
  340. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/README.md +0 -0
  341. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/__init__.py +0 -0
  342. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_device_online.py +0 -0
  343. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_file_operations.py +0 -0
  344. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_git_status_ui.py +0 -0
  345. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_login_flow.py +0 -0
  346. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_navigate_testing_folder.py +0 -0
  347. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_play_store_screenshots.py +0 -0
  348. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_terminal_buffer_performance.py +0 -0
  349. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_terminal_interaction.py +0 -0
  350. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_terminal_loading_race_condition.py +0 -0
  351. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_terminal_start.py +0 -0
  352. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_request_id.py +0 -0
  353. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/.env.example +0 -0
  354. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/README.md +0 -0
  355. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/__init__.py +0 -0
  356. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/cli.py +0 -0
  357. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/__init__.py +0 -0
  358. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/base_test.py +0 -0
  359. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/cli_manager.py +0 -0
  360. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/hierarchical_runner.py +0 -0
  361. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/playwright_manager.py +0 -0
  362. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/runner.py +0 -0
  363. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/shared_cli_manager.py +0 -0
  364. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/test_discovery.py +0 -0
  365. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/requirements.txt +0 -0
  366. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/UI_UX/opening_a_file_on_desktop_results_in_nothing.md +0 -0
  367. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/agent_context_management.md +0 -0
  368. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/django_server_time_sync.md +0 -0
  369. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/device_performance_degradation.md +0 -0
  370. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/git_data_not_captured_in_proxmox.md +0 -0
  371. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/indefinite_resource_loading.md +0 -0
  372. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/portacode_service_silently_down.md +0 -0
  373. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/premature_terminal_exit.md +0 -0
  374. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/project_cpu_hotspots.md +0 -0
  375. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/terminals_exit_upon_starting.md +0 -0
  376. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/wrong_item_classification_on_client_side.md +0 -0
  377. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/smartphone_terminal_input_frustrations.md +0 -0
  378. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/tools/generate_play_store_assets.py +0 -0
  379. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/tools/pairing_tester.py +0 -0
  380. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/tools/run_screenshot_suite.sh +0 -0
  381. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/tools/test_python_ntp_clock.py +0 -0
  382. {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/validate.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: portacode
3
- Version: 1.4.12.dev8
3
+ Version: 1.4.13.dev0
4
4
  Summary: Portacode CLI client and SDK
5
5
  Home-page: https://github.com/portacode/portacode
6
6
  Author: Meena Erian
@@ -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.12.dev8'
32
- __version_tuple__ = version_tuple = (1, 4, 12, 'dev8')
31
+ __version__ = version = '1.4.13.dev0'
32
+ __version_tuple__ = version_tuple = (1, 4, 13, 'dev0')
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -59,6 +59,7 @@ def _emit_progress_event(
59
59
  message: str,
60
60
  phase: str,
61
61
  request_id: Optional[str],
62
+ client_sessions: Optional[List[str]] = None,
62
63
  details: Optional[Dict[str, Any]] = None,
63
64
  ) -> None:
64
65
  loop = handler.context.get("event_loop")
@@ -84,6 +85,8 @@ def _emit_progress_event(
84
85
  payload["request_id"] = request_id
85
86
  if details:
86
87
  payload["details"] = details
88
+ if client_sessions:
89
+ payload["client_sessions"] = client_sessions
87
90
 
88
91
  future = asyncio.run_coroutine_threadsafe(handler.send_response(payload), loop)
89
92
  future.add_done_callback(
@@ -704,9 +707,12 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
704
707
  stable = 0
705
708
  history: List[Dict[str, Any]] = []
706
709
 
710
+ process_exited = False
711
+ exit_out = exit_err = ""
707
712
  while time.time() - start < timeout_s:
708
713
  if proc.poll() is not None:
709
- out, err = proc.communicate(timeout=1)
714
+ process_exited = True
715
+ exit_out, exit_err = proc.communicate(timeout=1)
710
716
  history.append(
711
717
  {
712
718
  "timestamp_s": round(time.time() - start, 2),
@@ -714,13 +720,7 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
714
720
  "returncode": proc.returncode,
715
721
  }
716
722
  )
717
- return {
718
- "ok": False,
719
- "error": "portacode connect exited before keys were created",
720
- "stdout": (out or "").strip(),
721
- "stderr": (err or "").strip(),
722
- "history": history,
723
- }
723
+ break
724
724
  pub_size = file_size(pub_path)
725
725
  priv_size = file_size(priv_path)
726
726
  if pub_size and priv_size:
@@ -749,13 +749,29 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
749
749
  )
750
750
  time.sleep(1)
751
751
 
752
- if stable < 1:
752
+ final_pub = file_size(pub_path)
753
+ final_priv = file_size(priv_path)
754
+ if final_pub and final_priv:
755
+ key_res = _run_pct(vmid, f"su - {user} -c 'cat {pub_path}'")
756
+ if not process_exited:
757
+ proc.terminate()
758
+ try:
759
+ proc.wait(timeout=3)
760
+ except subprocess.TimeoutExpired:
761
+ proc.kill()
762
+ return {
763
+ "ok": True,
764
+ "public_key": key_res["stdout"].strip(),
765
+ "history": history,
766
+ }
767
+
768
+ if not process_exited:
753
769
  proc.terminate()
754
770
  try:
755
771
  proc.wait(timeout=3)
756
772
  except subprocess.TimeoutExpired:
757
773
  proc.kill()
758
- out, err = proc.communicate(timeout=1)
774
+ exit_out, exit_err = proc.communicate(timeout=1)
759
775
  history.append(
760
776
  {
761
777
  "timestamp_s": round(time.time() - start, 2),
@@ -765,8 +781,8 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
765
781
  return {
766
782
  "ok": False,
767
783
  "error": "timed out waiting for portacode key files",
768
- "stdout": (out or "").strip(),
769
- "stderr": (err or "").strip(),
784
+ "stdout": (exit_out or "").strip(),
785
+ "stderr": (exit_err or "").strip(),
770
786
  "history": history,
771
787
  }
772
788
 
@@ -1037,8 +1053,14 @@ class CreateProxmoxContainerHandler(SyncHandler):
1037
1053
  return "create_proxmox_container"
1038
1054
 
1039
1055
  def execute(self, message: Dict[str, Any]) -> Dict[str, Any]:
1040
- logger.info("create_proxmox_container command received")
1041
1056
  request_id = message.get("request_id")
1057
+ source_client_session = message.get("source_client_session")
1058
+ logger.info(
1059
+ "create_proxmox_container command received request_id=%s client_session=%s",
1060
+ request_id,
1061
+ source_client_session,
1062
+ )
1063
+ client_sessions = [source_client_session] if source_client_session else None
1042
1064
  bootstrap_user, bootstrap_password, bootstrap_ssh_key = _get_provisioning_user_info(message)
1043
1065
  bootstrap_steps = _build_bootstrap_steps(bootstrap_user, bootstrap_password, bootstrap_ssh_key)
1044
1066
  total_steps = 3 + len(bootstrap_steps) + 2
@@ -1062,6 +1084,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
1062
1084
  message=start_message,
1063
1085
  phase="lifecycle",
1064
1086
  request_id=request_id,
1087
+ client_sessions=client_sessions,
1065
1088
  )
1066
1089
  try:
1067
1090
  result = action()
@@ -1076,6 +1099,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
1076
1099
  message=f"{step_label} failed: {exc}",
1077
1100
  phase="lifecycle",
1078
1101
  request_id=request_id,
1102
+ client_sessions=client_sessions,
1079
1103
  details={"error": str(exc)},
1080
1104
  )
1081
1105
  raise
@@ -1089,6 +1113,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
1089
1113
  message=success_message,
1090
1114
  phase="lifecycle",
1091
1115
  request_id=request_id,
1116
+ client_sessions=client_sessions,
1092
1117
  )
1093
1118
  current_step_index += 1
1094
1119
  return result
@@ -1118,7 +1143,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
1118
1143
  payload["cpuunits"] = max(int(payload["cpus"] * 1024), 10)
1119
1144
  payload["memory"] = int(payload["ram_mib"])
1120
1145
  payload["node"] = node
1121
- logger.debug(
1146
+ logger.info(
1122
1147
  "Provisioning container node=%s template=%s ram=%s cpu=%s storage=%s",
1123
1148
  node,
1124
1149
  payload["template"],
@@ -1131,6 +1156,12 @@ class CreateProxmoxContainerHandler(SyncHandler):
1131
1156
  payload["created_at"] = datetime.utcnow().isoformat() + "Z"
1132
1157
  payload["status"] = "creating"
1133
1158
  _write_container_record(vmid, payload)
1159
+ logger.info(
1160
+ "Container record written vmid=%s hostname=%s client_session=%s",
1161
+ vmid,
1162
+ payload["hostname"],
1163
+ source_client_session,
1164
+ )
1134
1165
  return proxmox, node, vmid, payload
1135
1166
 
1136
1167
  proxmox, node, vmid, payload = _run_lifecycle_step(
@@ -1189,9 +1220,16 @@ class CreateProxmoxContainerHandler(SyncHandler):
1189
1220
  message=message_text,
1190
1221
  phase="bootstrap",
1191
1222
  request_id=request_id,
1223
+ client_sessions=client_sessions,
1192
1224
  details=details or None,
1193
1225
  )
1194
1226
 
1227
+ logger.info(
1228
+ "Bootstrapping Portacode in container vmid=%s user=%s client_session=%s",
1229
+ vmid,
1230
+ payload["username"],
1231
+ source_client_session,
1232
+ )
1195
1233
  public_key, steps = _bootstrap_portacode(
1196
1234
  vmid,
1197
1235
  payload["username"],
@@ -1204,7 +1242,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
1204
1242
  )
1205
1243
  current_step_index += len(bootstrap_steps)
1206
1244
 
1207
- return {
1245
+ response = {
1208
1246
  "event": "proxmox_container_created",
1209
1247
  "success": True,
1210
1248
  "message": f"Container {vmid} is ready and Portacode key captured.",
@@ -1221,6 +1259,9 @@ class CreateProxmoxContainerHandler(SyncHandler):
1221
1259
  },
1222
1260
  "setup_steps": steps,
1223
1261
  }
1262
+ if client_sessions:
1263
+ response["client_sessions"] = client_sessions
1264
+ return response
1224
1265
 
1225
1266
 
1226
1267
  class StartPortacodeServiceHandler(SyncHandler):
@@ -1248,6 +1289,15 @@ class StartPortacodeServiceHandler(SyncHandler):
1248
1289
  start_index = int(message.get("step_index", 1))
1249
1290
  total_steps = int(message.get("total_steps", start_index + 2))
1250
1291
  request_id = message.get("request_id")
1292
+ source_client_session = message.get("source_client_session")
1293
+ client_sessions = [source_client_session] if source_client_session else None
1294
+
1295
+ logger.info(
1296
+ "start_portacode_service invoked vmid=%s user=%s client_session=%s",
1297
+ vmid,
1298
+ user,
1299
+ source_client_session,
1300
+ )
1251
1301
 
1252
1302
  auth_step_name = "setup_device_authentication"
1253
1303
  auth_label = "Setting up device authentication"
@@ -1261,6 +1311,7 @@ class StartPortacodeServiceHandler(SyncHandler):
1261
1311
  message="Notifying the server of the new device…",
1262
1312
  phase="service",
1263
1313
  request_id=request_id,
1314
+ client_sessions=client_sessions,
1264
1315
  )
1265
1316
  _emit_progress_event(
1266
1317
  self,
@@ -1272,6 +1323,7 @@ class StartPortacodeServiceHandler(SyncHandler):
1272
1323
  message="Authentication metadata recorded.",
1273
1324
  phase="service",
1274
1325
  request_id=request_id,
1326
+ client_sessions=client_sessions,
1275
1327
  )
1276
1328
 
1277
1329
  install_step = start_index + 1
@@ -1286,6 +1338,7 @@ class StartPortacodeServiceHandler(SyncHandler):
1286
1338
  message="Running sudo portacode service install…",
1287
1339
  phase="service",
1288
1340
  request_id=request_id,
1341
+ client_sessions=client_sessions,
1289
1342
  )
1290
1343
 
1291
1344
  cmd = f"su - {user} -c 'sudo -S portacode service install'"
@@ -1302,6 +1355,7 @@ class StartPortacodeServiceHandler(SyncHandler):
1302
1355
  message=f"{install_label} failed: {res.get('stderr') or res.get('stdout')}",
1303
1356
  phase="service",
1304
1357
  request_id=request_id,
1358
+ client_sessions=client_sessions,
1305
1359
  details={
1306
1360
  "stderr": res.get("stderr"),
1307
1361
  "stdout": res.get("stdout"),
@@ -1309,6 +1363,12 @@ class StartPortacodeServiceHandler(SyncHandler):
1309
1363
  )
1310
1364
  raise RuntimeError(res.get("stderr") or res.get("stdout") or "Service install failed")
1311
1365
 
1366
+ logger.info(
1367
+ "portacode service install command completed vmid=%s returncode=%s",
1368
+ vmid,
1369
+ res["returncode"],
1370
+ )
1371
+
1312
1372
  _emit_progress_event(
1313
1373
  self,
1314
1374
  step_index=install_step,
@@ -1319,14 +1379,18 @@ class StartPortacodeServiceHandler(SyncHandler):
1319
1379
  message="Portacode service install finished.",
1320
1380
  phase="service",
1321
1381
  request_id=request_id,
1382
+ client_sessions=client_sessions,
1322
1383
  )
1323
1384
 
1324
- return {
1385
+ response = {
1325
1386
  "event": "proxmox_service_started",
1326
1387
  "success": True,
1327
1388
  "message": "Portacode service install completed",
1328
1389
  "ctid": str(vmid),
1329
1390
  }
1391
+ if client_sessions:
1392
+ response["client_sessions"] = client_sessions
1393
+ return response
1330
1394
 
1331
1395
 
1332
1396
  class StartProxmoxContainerHandler(SyncHandler):
@@ -1342,12 +1406,20 @@ class StartProxmoxContainerHandler(SyncHandler):
1342
1406
  proxmox = _connect_proxmox(config)
1343
1407
  node = _get_node_from_config(config)
1344
1408
  _ensure_container_managed(proxmox, node, vmid)
1409
+ source_client_session = message.get("source_client_session")
1410
+ client_sessions = [source_client_session] if source_client_session else None
1411
+
1412
+ logger.info(
1413
+ "start_proxmox_container invoked vmid=%s client_session=%s",
1414
+ vmid,
1415
+ source_client_session,
1416
+ )
1345
1417
 
1346
1418
  status, elapsed = _start_container(proxmox, node, vmid)
1347
1419
  _update_container_record(vmid, {"status": "running"})
1348
1420
 
1349
1421
  infra = get_infra_snapshot()
1350
- return {
1422
+ response = {
1351
1423
  "event": "proxmox_container_action",
1352
1424
  "action": "start",
1353
1425
  "success": True,
@@ -1357,6 +1429,9 @@ class StartProxmoxContainerHandler(SyncHandler):
1357
1429
  "status": status.get("status"),
1358
1430
  "infra": infra,
1359
1431
  }
1432
+ if client_sessions:
1433
+ response["client_sessions"] = client_sessions
1434
+ return response
1360
1435
 
1361
1436
 
1362
1437
  class StopProxmoxContainerHandler(SyncHandler):
@@ -1372,6 +1447,14 @@ class StopProxmoxContainerHandler(SyncHandler):
1372
1447
  proxmox = _connect_proxmox(config)
1373
1448
  node = _get_node_from_config(config)
1374
1449
  _ensure_container_managed(proxmox, node, vmid)
1450
+ source_client_session = message.get("source_client_session")
1451
+ client_sessions = [source_client_session] if source_client_session else None
1452
+
1453
+ logger.info(
1454
+ "stop_proxmox_container invoked vmid=%s client_session=%s",
1455
+ vmid,
1456
+ source_client_session,
1457
+ )
1375
1458
 
1376
1459
  status, elapsed = _stop_container(proxmox, node, vmid)
1377
1460
  final_status = status.get("status") or "stopped"
@@ -1383,7 +1466,7 @@ class StopProxmoxContainerHandler(SyncHandler):
1383
1466
  if final_status != "running" and elapsed == 0.0
1384
1467
  else f"Stopped container {vmid} in {elapsed:.1f}s."
1385
1468
  )
1386
- return {
1469
+ response = {
1387
1470
  "event": "proxmox_container_action",
1388
1471
  "action": "stop",
1389
1472
  "success": True,
@@ -1393,6 +1476,9 @@ class StopProxmoxContainerHandler(SyncHandler):
1393
1476
  "status": final_status,
1394
1477
  "infra": infra,
1395
1478
  }
1479
+ if client_sessions:
1480
+ response["client_sessions"] = client_sessions
1481
+ return response
1396
1482
 
1397
1483
 
1398
1484
  class RemoveProxmoxContainerHandler(SyncHandler):
@@ -1408,13 +1494,21 @@ class RemoveProxmoxContainerHandler(SyncHandler):
1408
1494
  proxmox = _connect_proxmox(config)
1409
1495
  node = _get_node_from_config(config)
1410
1496
  _ensure_container_managed(proxmox, node, vmid)
1497
+ source_client_session = message.get("source_client_session")
1498
+ client_sessions = [source_client_session] if source_client_session else None
1499
+
1500
+ logger.info(
1501
+ "remove_proxmox_container invoked vmid=%s client_session=%s",
1502
+ vmid,
1503
+ source_client_session,
1504
+ )
1411
1505
 
1412
1506
  stop_status, stop_elapsed = _stop_container(proxmox, node, vmid)
1413
1507
  delete_status, delete_elapsed = _delete_container(proxmox, node, vmid)
1414
1508
  _remove_container_record(vmid)
1415
1509
 
1416
1510
  infra = get_infra_snapshot()
1417
- return {
1511
+ response = {
1418
1512
  "event": "proxmox_container_action",
1419
1513
  "action": "remove",
1420
1514
  "success": True,
@@ -1427,6 +1521,9 @@ class RemoveProxmoxContainerHandler(SyncHandler):
1427
1521
  "status": "deleted",
1428
1522
  "infra": infra,
1429
1523
  }
1524
+ if client_sessions:
1525
+ response["client_sessions"] = client_sessions
1526
+ return response
1430
1527
 
1431
1528
 
1432
1529
  class ConfigureProxmoxInfraHandler(SyncHandler):
@@ -1440,13 +1537,18 @@ class ConfigureProxmoxInfraHandler(SyncHandler):
1440
1537
  verify_ssl = bool(message.get("verify_ssl"))
1441
1538
  if not token_identifier or not token_value:
1442
1539
  raise ValueError("token_identifier and token_value are required")
1540
+ source_client_session = message.get("source_client_session")
1541
+ client_sessions = [source_client_session] if source_client_session else None
1443
1542
  snapshot = configure_infrastructure(token_identifier, token_value, verify_ssl=verify_ssl)
1444
- return {
1543
+ response = {
1445
1544
  "event": "proxmox_infra_configured",
1446
1545
  "success": True,
1447
1546
  "message": "Proxmox infrastructure configured",
1448
1547
  "infra": snapshot,
1449
1548
  }
1549
+ if client_sessions:
1550
+ response["client_sessions"] = client_sessions
1551
+ return response
1450
1552
 
1451
1553
 
1452
1554
  class RevertProxmoxInfraHandler(SyncHandler):
@@ -1455,10 +1557,15 @@ class RevertProxmoxInfraHandler(SyncHandler):
1455
1557
  return "revert_proxmox_infra"
1456
1558
 
1457
1559
  def execute(self, message: Dict[str, Any]) -> Dict[str, Any]:
1560
+ source_client_session = message.get("source_client_session")
1561
+ client_sessions = [source_client_session] if source_client_session else None
1458
1562
  snapshot = revert_infrastructure()
1459
- return {
1563
+ response = {
1460
1564
  "event": "proxmox_infra_reverted",
1461
1565
  "success": True,
1462
1566
  "message": "Proxmox infrastructure configuration reverted",
1463
1567
  "infra": snapshot,
1464
1568
  }
1569
+ if client_sessions:
1570
+ response["client_sessions"] = client_sessions
1571
+ return response
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: portacode
3
- Version: 1.4.12.dev8
3
+ Version: 1.4.13.dev0
4
4
  Summary: Portacode CLI client and SDK
5
5
  Home-page: https://github.com/portacode/portacode
6
6
  Author: Meena Erian
File without changes