wasm-cli 1.6.3__tar.gz → 1.6.4__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 (247) hide show
  1. {wasm_cli-1.6.3/src/wasm_cli.egg-info → wasm_cli-1.6.4}/PKG-INFO +1 -1
  2. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/pyproject.toml +1 -1
  3. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/setup.py +1 -1
  4. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/__init__.py +1 -1
  5. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/base.py +1 -1
  6. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/package_manager.py +12 -1
  7. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/lifecycle.py +23 -10
  8. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/source_manager.py +5 -5
  9. {wasm_cli-1.6.3 → wasm_cli-1.6.4/src/wasm_cli.egg-info}/PKG-INFO +1 -1
  10. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/LICENSE +0 -0
  11. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/MANIFEST.in +0 -0
  12. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/README.md +0 -0
  13. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/MONITOR.md +0 -0
  14. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/OBS_SETUP.md +0 -0
  15. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/assets/logo.png +0 -0
  16. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/assets/logo_bg.png +0 -0
  17. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/superpowers/plans/2026-08-13-wasm-competitive-parity-roadmap.md +0 -0
  18. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/superpowers/specs/2026-08-12-wasm-panel-design-direction.md +0 -0
  19. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/superpowers/specs/2026-08-12-wasm-v1-refactor-design.md +0 -0
  20. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/superpowers/specs/2026-08-13-wasm-competitive-parity-design.md +0 -0
  21. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/superpowers/specs/2026-08-14-wasm-panel-design-v2.md +0 -0
  22. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/man/wasm.1 +0 -0
  23. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/setup.cfg +0 -0
  24. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/__main__.py +0 -0
  25. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/__init__.py +0 -0
  26. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/app.py +0 -0
  27. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/__init__.py +0 -0
  28. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/backup.py +0 -0
  29. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/cert.py +0 -0
  30. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/config.py +0 -0
  31. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/db.py +0 -0
  32. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/env.py +0 -0
  33. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/health.py +0 -0
  34. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/monitor.py +0 -0
  35. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/service.py +0 -0
  36. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/setup.py +0 -0
  37. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/site.py +0 -0
  38. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/store.py +0 -0
  39. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/version.py +0 -0
  40. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/web.py +0 -0
  41. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/webapp.py +0 -0
  42. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/interactive.py +0 -0
  43. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/panel_links.py +0 -0
  44. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/prompts.py +0 -0
  45. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/completions/README.md +0 -0
  46. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/completions/_wasm +0 -0
  47. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/completions/wasm.bash +0 -0
  48. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/completions/wasm.fish +0 -0
  49. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/__init__.py +0 -0
  50. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/app_state.py +0 -0
  51. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/config.py +0 -0
  52. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/dependencies.py +0 -0
  53. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/exceptions.py +0 -0
  54. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/fs.py +0 -0
  55. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/logger.py +0 -0
  56. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/net.py +0 -0
  57. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/notifier.py +0 -0
  58. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/runner.py +0 -0
  59. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/store.py +0 -0
  60. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/totp.py +0 -0
  61. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/update_checker.py +0 -0
  62. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/utils.py +0 -0
  63. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/__init__.py +0 -0
  64. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/auto.py +0 -0
  65. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/docker_compose.py +0 -0
  66. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/__init__.py +0 -0
  67. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/env_manager.py +0 -0
  68. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/health.py +0 -0
  69. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/nginx_config.py +0 -0
  70. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/path_resolver.py +0 -0
  71. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/permissions.py +0 -0
  72. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/preflight.py +0 -0
  73. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/prisma.py +0 -0
  74. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/registration.py +0 -0
  75. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/summary.py +0 -0
  76. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/turbo.py +0 -0
  77. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/workspace.py +0 -0
  78. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/interface.py +0 -0
  79. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/monorepo.py +0 -0
  80. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/nextjs.py +0 -0
  81. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/nodejs.py +0 -0
  82. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/pipeline.py +0 -0
  83. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/python.py +0 -0
  84. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/recorder.py +0 -0
  85. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/registry.py +0 -0
  86. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/static.py +0 -0
  87. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/vite.py +0 -0
  88. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/main.py +0 -0
  89. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/__init__.py +0 -0
  90. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/apache_manager.py +0 -0
  91. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/backup_manager.py +0 -0
  92. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/backup_scheduler.py +0 -0
  93. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/base_manager.py +0 -0
  94. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/cert_manager.py +0 -0
  95. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/cron_manager.py +0 -0
  96. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/__init__.py +0 -0
  97. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/base.py +0 -0
  98. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/mongodb.py +0 -0
  99. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/mysql.py +0 -0
  100. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/postgres.py +0 -0
  101. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/redis.py +0 -0
  102. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/registry.py +0 -0
  103. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/nginx_manager.py +0 -0
  104. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/service_manager.py +0 -0
  105. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/webserver.py +0 -0
  106. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/__init__.py +0 -0
  107. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/email_notifier.py +0 -0
  108. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/metrics.py +0 -0
  109. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/models.py +0 -0
  110. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/observation_store.py +0 -0
  111. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/process_monitor.py +0 -0
  112. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/signals.py +0 -0
  113. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/timeseries.py +0 -0
  114. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/__init__.py +0 -0
  115. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/apache/proxy.conf.j2 +0 -0
  116. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/apache/static.conf.j2 +0 -0
  117. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/nginx/advanced.conf.j2 +0 -0
  118. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/nginx/monorepo.conf.j2 +0 -0
  119. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/nginx/proxy.conf.j2 +0 -0
  120. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/nginx/static.conf.j2 +0 -0
  121. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/_escape.j2 +0 -0
  122. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/app.service.j2 +0 -0
  123. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/backup-service.j2 +0 -0
  124. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/backup-timer.j2 +0 -0
  125. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/cron-service.j2 +0 -0
  126. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/cron-timer.j2 +0 -0
  127. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/docker-compose.service.j2 +0 -0
  128. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/__init__.py +0 -0
  129. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/domain.py +0 -0
  130. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/environment.py +0 -0
  131. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/names.py +0 -0
  132. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/port.py +0 -0
  133. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/source.py +0 -0
  134. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/ssh.py +0 -0
  135. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/__init__.py +0 -0
  136. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/__init__.py +0 -0
  137. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/apps.py +0 -0
  138. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/auth.py +0 -0
  139. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/backup_schedules.py +0 -0
  140. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/backups.py +0 -0
  141. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/certs.py +0 -0
  142. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/config.py +0 -0
  143. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/cron.py +0 -0
  144. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/databases.py +0 -0
  145. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/deps.py +0 -0
  146. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/hooks.py +0 -0
  147. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/jobs.py +0 -0
  148. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/metrics.py +0 -0
  149. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/monitor.py +0 -0
  150. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/router.py +0 -0
  151. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/services.py +0 -0
  152. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/sites.py +0 -0
  153. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/system.py +0 -0
  154. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/auth.py +0 -0
  155. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/events.py +0 -0
  156. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/jobs.py +0 -0
  157. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/metrics_collector.py +0 -0
  158. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/pydantic_compat.py +0 -0
  159. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/server.py +0 -0
  160. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/app.css +0 -0
  161. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/logo.png +0 -0
  162. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/logo.webp +0 -0
  163. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/panel.js +0 -0
  164. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/fonts/geist-mono-latin-400-normal.woff2 +0 -0
  165. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/fonts/geist-mono-latin-500-normal.woff2 +0 -0
  166. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/fonts/geist-sans-latin-400-normal.woff2 +0 -0
  167. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/fonts/geist-sans-latin-500-normal.woff2 +0 -0
  168. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/fonts/geist-sans-latin-600-normal.woff2 +0 -0
  169. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/htmx.min.js +0 -0
  170. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/qrcodegen.js +0 -0
  171. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/sse.js +0 -0
  172. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/uplot.min.css +0 -0
  173. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/uplot.min.js +0 -0
  174. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/xterm.css +0 -0
  175. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/xterm.js +0 -0
  176. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/_macros.html +0 -0
  177. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/base.html +0 -0
  178. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/api_tokens.html +0 -0
  179. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/app_charts.html +0 -0
  180. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/app_env.html +0 -0
  181. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/backup_schedule_section.html +0 -0
  182. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/cron_runs.html +0 -0
  183. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/cron_section.html +0 -0
  184. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/db_console.html +0 -0
  185. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/db_engine.html +0 -0
  186. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/deploy_form_check.html +0 -0
  187. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/deploy_form_options.html +0 -0
  188. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/deploy_recent.html +0 -0
  189. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/deploy_rollback.html +0 -0
  190. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/deploy_rows.html +0 -0
  191. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/infra_service_editor.html +0 -0
  192. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/infra_service_form.html +0 -0
  193. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/infra_site_editor.html +0 -0
  194. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/infra_site_form.html +0 -0
  195. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/machine.html +0 -0
  196. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/notif_channels.html +0 -0
  197. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/sessions.html +0 -0
  198. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_editor.html +0 -0
  199. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_form_backups.html +0 -0
  200. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_form_notifications.html +0 -0
  201. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_form_paths.html +0 -0
  202. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_form_ssl.html +0 -0
  203. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_form_web.html +0 -0
  204. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_form_webserver.html +0 -0
  205. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_section.html +0 -0
  206. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/totp.html +0 -0
  207. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/webhook_section.html +0 -0
  208. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/login.html +0 -0
  209. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/activity.html +0 -0
  210. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/app.html +0 -0
  211. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/backups.html +0 -0
  212. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/certificates.html +0 -0
  213. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/cron.html +0 -0
  214. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/dashboard.html +0 -0
  215. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/databases.html +0 -0
  216. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/deploy.html +0 -0
  217. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/deployment_detail.html +0 -0
  218. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/deployments.html +0 -0
  219. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/failure.html +0 -0
  220. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/missing.html +0 -0
  221. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/resources.html +0 -0
  222. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/service_editor.html +0 -0
  223. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/service_new.html +0 -0
  224. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/settings.html +0 -0
  225. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/site_editor.html +0 -0
  226. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/site_new.html +0 -0
  227. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/__init__.py +0 -0
  228. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/app_charts.py +0 -0
  229. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/backup_schedules.py +0 -0
  230. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/context.py +0 -0
  231. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/cron.py +0 -0
  232. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/databases.py +0 -0
  233. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/deploy_form.py +0 -0
  234. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/deployments.py +0 -0
  235. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/infrastructure.py +0 -0
  236. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/machine.py +0 -0
  237. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/rendering.py +0 -0
  238. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/resources.py +0 -0
  239. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/router.py +0 -0
  240. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/settings_editor.py +0 -0
  241. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/websockets/__init__.py +0 -0
  242. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/websockets/router.py +0 -0
  243. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm_cli.egg-info/SOURCES.txt +0 -0
  244. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm_cli.egg-info/dependency_links.txt +0 -0
  245. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm_cli.egg-info/entry_points.txt +0 -0
  246. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm_cli.egg-info/requires.txt +0 -0
  247. {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wasm-cli
3
- Version: 1.6.3
3
+ Version: 1.6.4
4
4
  Summary: Web App System Management - Deploy and manage web applications on Linux servers
5
5
  Author: Yago López Prado
6
6
  Author-email: Yago López Prado <yago.lopez.adeje@gmail.com>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "wasm-cli"
7
- version = "1.6.3"
7
+ version = "1.6.4"
8
8
  description = "Web App System Management - Deploy and manage web applications on Linux servers"
9
9
  readme = "README.md"
10
10
  license = { text = "WASM-NCSAL" }
@@ -9,7 +9,7 @@ from setuptools import setup, find_packages
9
9
 
10
10
  setup(
11
11
  name="wasm-cli",
12
- version="1.6.3",
12
+ version="1.6.4",
13
13
  description="Web App System Management - Deploy and manage web applications on Linux servers",
14
14
  author="Yago López Prado",
15
15
  author_email="yago.lopez.adeje@gmail.com",
@@ -15,7 +15,7 @@ from importlib.metadata import version as _installed_version
15
15
  #: as an OBS build directory. The single source of truth is the ``version``
16
16
  #: field of pyproject.toml; ``scripts/release.py`` keeps this literal and the
17
17
  #: distribution packaging files in step with it.
18
- _FALLBACK_VERSION = "1.6.3"
18
+ _FALLBACK_VERSION = "1.6.4"
19
19
 
20
20
  try:
21
21
  __version__ = _installed_version("wasm-cli")
@@ -360,7 +360,7 @@ class BaseDeployer(AppDeployer):
360
360
  Returns:
361
361
  Install command as list.
362
362
  """
363
- return self._pm_helper.get_install_command(self.package_manager)
363
+ return self._pm_helper.get_install_command(self.package_manager, self.app_path)
364
364
 
365
365
  def _get_pm_run_command(self, script: str) -> list[str]:
366
366
  """
@@ -170,16 +170,27 @@ class PackageManagerHelper:
170
170
  available.append(pm)
171
171
  return available
172
172
 
173
- def get_install_command(self, package_manager: str) -> list[str]:
173
+ def get_install_command(self, package_manager: str, path: Path | None = None) -> list[str]:
174
174
  """
175
175
  Get the install command for the package manager.
176
176
 
177
177
  Args:
178
178
  package_manager: Package manager name.
179
+ path: The project directory. With npm and no lockfile in it the
180
+ command is ``npm install``: ``npm ci`` refuses to run without
181
+ one and fails with a usage error that says nothing useful.
179
182
 
180
183
  Returns:
181
184
  Install command as list.
182
185
  """
186
+ if (
187
+ package_manager == "npm"
188
+ and path is not None
189
+ and not (path / "package-lock.json").exists()
190
+ and not (path / "npm-shrinkwrap.json").exists()
191
+ ):
192
+ return ["npm", "install"]
193
+
183
194
  commands = {
184
195
  "pnpm": ["pnpm", "install", "--frozen-lockfile"],
185
196
  "bun": ["bun", "install", "--frozen-lockfile"],
@@ -17,8 +17,9 @@ so the three surfaces cannot drift apart again.
17
17
  The sequence, and why it is in this order:
18
18
 
19
19
  1. A backup, so ``wasm rollback`` has somewhere to return to.
20
- 2. A non-destructive ``git pull``. Only an explicit new source replaces the
21
- tree, and then the ``.env`` is carried across it.
20
+ 2. A non-destructive ``git pull``, or, for a tree that is not a git checkout
21
+ or an explicit new source, a fetch that never deletes anything already in
22
+ the tree. The ``.env`` is carried across it.
22
23
  3. The type recorded at deploy time, not a fresh detection over a tree that
23
24
  now contains build output.
24
25
  4. The deployer's own ``update()``: install, build, and hand the tree back to
@@ -48,6 +49,7 @@ from wasm.managers.backup_manager import RollbackManager
48
49
  from wasm.managers.service_manager import ServiceManager
49
50
  from wasm.managers.source_manager import SourceManager
50
51
  from wasm.validators.domain import validate_domain
52
+ from wasm.validators.source import validate_source
51
53
 
52
54
  #: Called as each phase begins, with its position, the total and a description.
53
55
  PhaseReporter = Callable[[int, int, str], None]
@@ -157,13 +159,13 @@ def update_app(
157
159
  if source:
158
160
  phase(2, PHASES, "Fetching from new source")
159
161
  log.substep(f"Source: {source}")
160
- _fetch_keeping_env(source_manager, source, app_path, branch)
162
+ _refetch_without_deleting(source_manager, source, app_path, branch)
161
163
  elif not (app_path / ".git").exists() and recorded_source:
162
164
  # An archive or a local directory has nothing to pull from; the only
163
165
  # way to update it is to fetch it again.
164
166
  phase(2, PHASES, "Fetching the recorded source again")
165
167
  log.substep(f"Source: {recorded_source}")
166
- _fetch_keeping_env(source_manager, recorded_source, app_path, branch)
168
+ _refetch_without_deleting(source_manager, recorded_source, app_path, branch)
167
169
  else:
168
170
  phase(2, PHASES, "Pulling latest changes")
169
171
  source_manager.pull(app_path, branch=branch)
@@ -208,24 +210,35 @@ def update_app(
208
210
  )
209
211
 
210
212
 
211
- def _fetch_keeping_env(
213
+ def _refetch_without_deleting(
212
214
  source_manager: SourceManager, source: str, app_path: Path, branch: str | None
213
215
  ) -> None:
214
216
  """
215
- Replace the tree with a new source, carrying the ``.env`` file across.
217
+ Bring the tree up to date with a source without deleting anything in it.
218
+
219
+ An update must never remove what the application wrote into its own tree:
220
+ uploaded images, generated files, anything outside version control. A git
221
+ checkout updated from a git source is reset to the new commit, which only
222
+ touches tracked files. Any other combination is copied over the existing
223
+ tree, so a file dropped from the source stays behind until a redeploy
224
+ instead of taking the application's data with it.
216
225
 
217
226
  Args:
218
227
  source_manager: Manager the fetch goes through.
219
- source: The new source.
228
+ source: The source to fetch.
220
229
  app_path: The application's directory.
221
230
  branch: Git branch to fetch.
222
231
  """
223
- # A forced fetch wipes the tree, and the environment file is the one thing
224
- # in it that is not in version control.
232
+ # Carried across either way: a source that ships its own .env (a local
233
+ # development directory usually does) must not replace production's.
225
234
  env_file = app_path / ".env"
226
235
  env_backup = env_file.read_text() if env_file.is_file() else None
227
236
 
228
- source_manager.fetch(source, app_path, branch=branch, force=True)
237
+ source_type, _ = validate_source(source)
238
+ if source_type == "git" and (app_path / ".git").exists():
239
+ source_manager.fetch(source, app_path, branch=branch, force=True)
240
+ else:
241
+ source_manager.fetch(source, app_path, branch=branch, clean=False)
229
242
 
230
243
  if env_backup is not None:
231
244
  fs = get_fs()
@@ -1177,7 +1177,7 @@ class SourceManager(BaseManager):
1177
1177
  """
1178
1178
  Force update a Git repository by fetching and resetting.
1179
1179
 
1180
- Preserves untracked files like .env.
1180
+ Untracked files, ignored or not, are left exactly where they are.
1181
1181
 
1182
1182
  Args:
1183
1183
  url: Git repository URL.
@@ -1222,14 +1222,14 @@ class SourceManager(BaseManager):
1222
1222
  else:
1223
1223
  target_ref = "origin/main" # Fallback
1224
1224
 
1225
- # Reset to target (preserves untracked files)
1225
+ # reset --hard rewrites tracked files only. There is deliberately no
1226
+ # `git clean` after it: that deletes every untracked file that is not
1227
+ # ignored, which in a deployed application is its uploads and whatever
1228
+ # else it wrote into its own tree.
1226
1229
  result = self._git(["reset", "--hard", target_ref], cwd=destination)
1227
1230
  if not result.success:
1228
1231
  raise SourceError("Git reset failed", details=result.stderr)
1229
1232
 
1230
- # Clean tracked files only
1231
- self._git(["clean", "-fd"], cwd=destination)
1232
-
1233
1233
  return True
1234
1234
 
1235
1235
  def clone_git(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wasm-cli
3
- Version: 1.6.3
3
+ Version: 1.6.4
4
4
  Summary: Web App System Management - Deploy and manage web applications on Linux servers
5
5
  Author: Yago López Prado
6
6
  Author-email: Yago López Prado <yago.lopez.adeje@gmail.com>
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes