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.
- {wasm_cli-1.6.3/src/wasm_cli.egg-info → wasm_cli-1.6.4}/PKG-INFO +1 -1
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/pyproject.toml +1 -1
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/setup.py +1 -1
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/__init__.py +1 -1
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/base.py +1 -1
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/package_manager.py +12 -1
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/lifecycle.py +23 -10
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/source_manager.py +5 -5
- {wasm_cli-1.6.3 → wasm_cli-1.6.4/src/wasm_cli.egg-info}/PKG-INFO +1 -1
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/LICENSE +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/MANIFEST.in +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/README.md +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/MONITOR.md +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/OBS_SETUP.md +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/assets/logo.png +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/assets/logo_bg.png +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/superpowers/plans/2026-08-13-wasm-competitive-parity-roadmap.md +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/superpowers/specs/2026-08-12-wasm-panel-design-direction.md +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/superpowers/specs/2026-08-12-wasm-v1-refactor-design.md +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/superpowers/specs/2026-08-13-wasm-competitive-parity-design.md +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/superpowers/specs/2026-08-14-wasm-panel-design-v2.md +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/man/wasm.1 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/setup.cfg +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/__main__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/app.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/backup.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/cert.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/config.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/db.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/env.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/health.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/monitor.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/service.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/setup.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/site.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/store.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/version.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/web.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/commands/webapp.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/interactive.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/panel_links.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/cli/prompts.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/completions/README.md +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/completions/_wasm +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/completions/wasm.bash +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/completions/wasm.fish +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/app_state.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/config.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/dependencies.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/exceptions.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/fs.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/logger.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/net.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/notifier.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/runner.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/store.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/totp.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/update_checker.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/core/utils.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/auto.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/docker_compose.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/env_manager.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/health.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/nginx_config.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/path_resolver.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/permissions.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/preflight.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/prisma.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/registration.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/summary.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/turbo.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/helpers/workspace.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/interface.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/monorepo.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/nextjs.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/nodejs.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/pipeline.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/python.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/recorder.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/registry.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/static.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/deployers/vite.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/main.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/apache_manager.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/backup_manager.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/backup_scheduler.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/base_manager.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/cert_manager.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/cron_manager.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/base.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/mongodb.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/mysql.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/postgres.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/redis.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/database/registry.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/nginx_manager.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/service_manager.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/managers/webserver.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/email_notifier.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/metrics.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/models.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/observation_store.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/process_monitor.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/signals.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/monitor/timeseries.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/apache/proxy.conf.j2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/apache/static.conf.j2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/nginx/advanced.conf.j2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/nginx/monorepo.conf.j2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/nginx/proxy.conf.j2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/nginx/static.conf.j2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/_escape.j2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/app.service.j2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/backup-service.j2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/backup-timer.j2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/cron-service.j2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/cron-timer.j2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/templates/systemd/docker-compose.service.j2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/domain.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/environment.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/names.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/port.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/source.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/validators/ssh.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/apps.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/auth.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/backup_schedules.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/backups.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/certs.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/config.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/cron.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/databases.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/deps.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/hooks.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/jobs.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/metrics.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/monitor.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/router.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/services.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/sites.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/api/system.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/auth.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/events.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/jobs.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/metrics_collector.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/pydantic_compat.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/server.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/app.css +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/logo.png +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/logo.webp +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/panel.js +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/fonts/geist-mono-latin-400-normal.woff2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/fonts/geist-mono-latin-500-normal.woff2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/fonts/geist-sans-latin-400-normal.woff2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/fonts/geist-sans-latin-500-normal.woff2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/fonts/geist-sans-latin-600-normal.woff2 +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/htmx.min.js +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/qrcodegen.js +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/sse.js +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/uplot.min.css +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/uplot.min.js +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/xterm.css +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/xterm.js +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/_macros.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/base.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/api_tokens.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/app_charts.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/app_env.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/backup_schedule_section.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/cron_runs.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/cron_section.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/db_console.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/db_engine.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/deploy_form_check.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/deploy_form_options.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/deploy_recent.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/deploy_rollback.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/deploy_rows.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/infra_service_editor.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/infra_service_form.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/infra_site_editor.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/infra_site_form.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/machine.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/notif_channels.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/sessions.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_editor.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_form_backups.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_form_notifications.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_form_paths.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_form_ssl.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_form_web.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_form_webserver.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/settings_section.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/totp.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/fragments/webhook_section.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/login.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/activity.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/app.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/backups.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/certificates.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/cron.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/dashboard.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/databases.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/deploy.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/deployment_detail.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/deployments.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/failure.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/missing.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/resources.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/service_editor.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/service_new.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/settings.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/site_editor.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/templates/pages/site_new.html +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/app_charts.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/backup_schedules.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/context.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/cron.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/databases.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/deploy_form.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/deployments.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/infrastructure.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/machine.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/rendering.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/resources.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/router.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/views/settings_editor.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/websockets/__init__.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/websockets/router.py +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm_cli.egg-info/SOURCES.txt +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm_cli.egg-info/dependency_links.txt +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm_cli.egg-info/entry_points.txt +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm_cli.egg-info/requires.txt +0 -0
- {wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm_cli.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "wasm-cli"
|
|
7
|
-
version = "1.6.
|
|
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.
|
|
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.
|
|
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
|
|
21
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
213
|
+
def _refetch_without_deleting(
|
|
212
214
|
source_manager: SourceManager, source: str, app_path: Path, branch: str | None
|
|
213
215
|
) -> None:
|
|
214
216
|
"""
|
|
215
|
-
|
|
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
|
|
228
|
+
source: The source to fetch.
|
|
220
229
|
app_path: The application's directory.
|
|
221
230
|
branch: Git branch to fetch.
|
|
222
231
|
"""
|
|
223
|
-
#
|
|
224
|
-
#
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
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(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/superpowers/specs/2026-08-12-wasm-panel-design-direction.md
RENAMED
|
File without changes
|
{wasm_cli-1.6.3 → wasm_cli-1.6.4}/docs/superpowers/specs/2026-08-12-wasm-v1-refactor-design.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/fonts/geist-mono-latin-400-normal.woff2
RENAMED
|
File without changes
|
{wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/fonts/geist-mono-latin-500-normal.woff2
RENAMED
|
File without changes
|
{wasm_cli-1.6.3 → wasm_cli-1.6.4}/src/wasm/web/static/vendor/fonts/geist-sans-latin-400-normal.woff2
RENAMED
|
File without changes
|