remo-cli 4.3.1__tar.gz → 4.3.3__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.
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.github/workflows/ci.yml +6 -6
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.github/workflows/codeql.yml +2 -2
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.github/workflows/dependency-review.yml +1 -1
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.github/workflows/dev-build.yml +2 -2
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.github/workflows/provision.yml +1 -1
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.github/workflows/release-please.yml +13 -3
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.github/workflows/release.yml +2 -2
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.github/workflows/smoke-test.yml +3 -3
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.github/workflows/teardown.yml +1 -1
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.gitignore +4 -0
- remo_cli-4.3.3/.release-please-manifest.json +3 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/CHANGELOG.md +14 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/PKG-INFO +17 -1
- {remo_cli-4.3.1 → remo_cli-4.3.3}/README.md +16 -0
- remo_cli-4.3.3/docs/examples/orbstack-cloud-init-tailscale.yaml +182 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/package-lock.json +835 -2107
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/package.json +5 -5
- {remo_cli-4.3.1 → remo_cli-4.3.3/frontend}/playwright.config.ts +13 -11
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/vite.config.ts +1 -1
- {remo_cli-4.3.1 → remo_cli-4.3.3}/pyproject.toml +1 -1
- remo_cli-4.3.3/tests/unit/test_docs_examples.py +161 -0
- remo_cli-4.3.3/tests/unit/test_workflow_action_pins.py +85 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/uv.lock +1 -1
- remo_cli-4.3.1/.release-please-manifest.json +0 -3
- remo_cli-4.3.1/tests/unit/test_docs_examples.py +0 -80
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/release/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-analyze/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-checklist/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-clarify/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-constitution/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-converge/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-git-commit/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-git-feature/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-git-initialize/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-git-remote/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-git-validate/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-implement/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-plan/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-specify/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-tasks/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.claude/skills/speckit-taskstoissues/SKILL.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.devcontainer/devcontainer.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.dockerignore +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.github/CODEOWNERS +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.github/dependabot.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.github/workflows/smoke-test-cleanup.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.maverick/checkpoints/feature/implementation_complete.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.maverick/checkpoints/feature/phase_${{ index }}_complete.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.maverick/checkpoints/feature/validation_complete.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/.registry +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/README.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/commands/speckit.git.commit.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/commands/speckit.git.feature.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/commands/speckit.git.initialize.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/commands/speckit.git.remote.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/commands/speckit.git.validate.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/config-template.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/extension.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/git-config.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/scripts/bash/auto-commit.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/scripts/bash/create-new-feature.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/scripts/bash/git-common.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/scripts/powershell/create-new-feature.ps1 +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/extensions.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/feature.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/init-options.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/integration.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/integrations/claude.manifest.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/integrations/speckit.manifest.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/memory/constitution.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/scripts/bash/common.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/scripts/bash/setup-plan.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/scripts/bash/setup-tasks.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/templates/agent-file-template.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/templates/checklist-template.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/templates/constitution-template.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/templates/plan-template.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/templates/spec-template.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/templates/tasks-template.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/workflows/speckit/workflow.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/.specify/workflows/workflow-registry.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/AGENTS.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/CLAUDE.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/CONTRIBUTING.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/Dockerfile +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/LICENSE +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/SECURITY.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/.ansible-lint +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/README.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/ansible.cfg +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/aws_configure.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/aws_resize.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/aws_site.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/aws_teardown.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/group_vars/all.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/group_vars/incus_containers.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/group_vars/proxmox_containers.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/hetzner_configure.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/hetzner_provision.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/hetzner_resize.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/hetzner_site.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/hetzner_teardown.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/incus_bootstrap.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/incus_configure.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/incus_provision.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/incus_resize.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/incus_site.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/incus_teardown.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/inventory/hosts.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/inventory/incus_containers.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/proxmox_bootstrap.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/proxmox_configure.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/proxmox_provision.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/proxmox_resize.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/proxmox_site.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/proxmox_teardown.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/requirements.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/aws_server/defaults/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/aws_server/tasks/ebs.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/aws_server/tasks/ec2.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/aws_server/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/aws_server/tasks/patch_manager.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/aws_server/tasks/preflight.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/aws_server/tasks/security_group.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/deacon/defaults/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/deacon/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/devcontainers/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/docker/handlers/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/docker/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/fzf/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/github_cli/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/hetzner_server/defaults/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/hetzner_server/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/incus_bootstrap/defaults/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/incus_bootstrap/handlers/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/incus_bootstrap/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/incus_container/defaults/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/incus_container/handlers/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/incus_container/meta/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/incus_container/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/incus_container/tasks/preflight.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/incus_container_teardown/defaults/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/incus_container_teardown/meta/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/incus_container_teardown/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/nodejs/defaults/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/nodejs/files/nodesource-repo.gpg.key +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/nodejs/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/proxmox_bootstrap/defaults/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/proxmox_bootstrap/meta/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/proxmox_bootstrap/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/proxmox_container/defaults/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/proxmox_container/handlers/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/proxmox_container/meta/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/proxmox_container/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/proxmox_container/tasks/preflight.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/proxmox_container_teardown/defaults/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/proxmox_container_teardown/meta/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/proxmox_container_teardown/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/user_setup/defaults/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/user_setup/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/user_setup/templates/devshell.sh.j2 +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/user_setup/templates/project-launch.sh.j2 +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/user_setup/templates/project-menu.sh.j2 +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/user_setup/templates/remo-host.sh.j2 +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/zellij/defaults/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/zellij/tasks/main.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/zellij/templates/config.kdl.j2 +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/roles/zellij/templates/layouts/minimal.kdl.j2 +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/ssh_configure.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/tasks/configure_dev_tools.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/ansible/tasks/repair_apt_sources.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docker/Dockerfile +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docker/compose.example.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docker/entrypoint.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docs/aws.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docs/examples/orbstack-cloud-init.yaml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docs/feature-history.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docs/hetzner.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docs/incus.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docs/install.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docs/maintaining-claude-md.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docs/maintaining-generated-types.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docs/providers.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docs/proxmox.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docs/remo-web-speckit-input.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docs/remo-web.html +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/docs/web-session-interface.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/index.html +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/scripts/check-types-fresh.mjs +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/scripts/generate-frame-types.mjs +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/scripts/generate-schema-types.mjs +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/api/client.test.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/api/client.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/api/generated/README.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/api/generated/openapi.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/api/generated/schema.d.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/api/generated/terminal-frames.d.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/api/generated/terminal-frames.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/api/generated.test.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/AppRoot.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/AppShell.css +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/AppShell.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/AwaitingAdoption.css +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/AwaitingAdoption.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/OfflineOverlay.css +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/OfflineOverlay.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/PairToSync.css +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/PairToSync.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/SessionRail.css +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/SessionRail.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/SettingsPage.css +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/SettingsPage.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/ShortcutsModal.css +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/ShortcutsModal.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/TerminalCard.css +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/TerminalCard.test.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/TerminalCard.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/TopBar.css +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/TopBar.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/WorkspacePane.css +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/WorkspacePane.test.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/WorkspacePane.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/masterLayout.test.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/masterLayout.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/providerMeta.test.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/providerMeta.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/railModel.test.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/components/railModel.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/lib/clipboard.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/lib/fullscreen.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/main.tsx +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/state/discovery.test.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/state/discovery.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/state/fonts.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/state/health.test.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/state/health.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/state/latency.test.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/state/latency.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/state/settings.test.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/state/settings.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/state/useConsoleKeyboard.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/state/workspace.test.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/state/workspace.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/terminal/.gitkeep +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/terminal/RendererAdapter.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/terminal/TerminalConnection.test.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/terminal/TerminalConnection.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/terminal/XtermRenderer.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/terminal/defaultRenderer.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/terminal/keymap.test.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/terminal/keymap.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/test/setup.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/theme/fonts.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/theme/terminalThemes.test.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/theme/terminalThemes.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/src/theme/tokens.css +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3/frontend}/tests/e2e/fixtures.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3/frontend}/tests/e2e/keyboard-routing.spec.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3/frontend}/tests/e2e/mobile.spec.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3/frontend}/tests/e2e/reconnect.spec.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3/frontend}/tests/e2e/terminal-shell-io.spec.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3/frontend}/tests/e2e/terminal-tui-compatibility.spec.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3/frontend}/tests/e2e/workspace-layout.spec.ts +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/frontend/tsconfig.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/install.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/maverick.yaml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/project-menu.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/release-please-config.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/remo +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/remo.svg +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/run.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/scripts/export_openapi.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/scripts/palette-check.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/scripts/setup-aws-oidc.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/001-bootstrap-incus-host/checklists/requirements.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/001-bootstrap-incus-host/checklists/validation.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/001-bootstrap-incus-host/contracts/playbook-interface.yaml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/001-bootstrap-incus-host/contracts/role-interface.yaml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/001-bootstrap-incus-host/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/001-bootstrap-incus-host/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/001-bootstrap-incus-host/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/001-bootstrap-incus-host/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/001-bootstrap-incus-host/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/001-bootstrap-incus-host/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/002-incus-container-support/checklists/requirements.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/002-incus-container-support/contracts/playbook-interface.yaml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/002-incus-container-support/contracts/role-interface.yaml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/002-incus-container-support/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/002-incus-container-support/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/002-incus-container-support/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/002-incus-container-support/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/002-incus-container-support/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/002-incus-container-support/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/003-python-cli-rewrite/checklists/requirements.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/003-python-cli-rewrite/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/003-python-cli-rewrite/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/003-python-cli-rewrite/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/003-python-cli-rewrite/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/003-python-cli-rewrite/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/003-python-cli-rewrite/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/004-proxmox-container-support/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/005-provider-snapshots/checklists/requirements.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/005-provider-snapshots/contracts/cli-surface.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/005-provider-snapshots/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/005-provider-snapshots/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/005-provider-snapshots/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/005-provider-snapshots/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/005-provider-snapshots/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/005-provider-snapshots/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/010-web-session-interface/checklists/requirements.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/010-web-session-interface/contracts/remo-host-protocol.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/010-web-session-interface/contracts/rest-api.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/010-web-session-interface/contracts/terminal-websocket.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/010-web-session-interface/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/010-web-session-interface/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/010-web-session-interface/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/010-web-session-interface/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/010-web-session-interface/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/010-web-session-interface/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/011-web-adopt/checklists/requirements.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/011-web-adopt/contracts/cli-web-adopt.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/011-web-adopt/contracts/setup-api.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/011-web-adopt/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/011-web-adopt/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/011-web-adopt/quickstart-results.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/011-web-adopt/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/011-web-adopt/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/011-web-adopt/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/011-web-adopt/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/012-web-adopt-pairing/contracts/cli-web-adopt.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/012-web-adopt-pairing/contracts/pairing-api.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/012-web-adopt-pairing/contracts/setup-api.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/012-web-adopt-pairing/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/012-web-adopt-pairing/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/012-web-adopt-pairing/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/012-web-adopt-pairing/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/012-web-adopt-pairing/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/012-web-adopt-pairing/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/013-managed-instance-tags/contracts/cli-sync.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/013-managed-instance-tags/contracts/marker-commands.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/013-managed-instance-tags/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/013-managed-instance-tags/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/013-managed-instance-tags/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/013-managed-instance-tags/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/013-managed-instance-tags/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/013-managed-instance-tags/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/014-register-ssh-host/contracts/add-command.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/014-register-ssh-host/contracts/remove-command.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/014-register-ssh-host/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/014-register-ssh-host/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/014-register-ssh-host/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/014-register-ssh-host/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/014-register-ssh-host/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/014-register-ssh-host/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/015-registry-v2/checklists/requirements.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/015-registry-v2/contracts/mirror-payload-v2.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/015-registry-v2/contracts/registry-accessor-api.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/015-registry-v2/contracts/registry-file-v2.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/015-registry-v2/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/015-registry-v2/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/015-registry-v2/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/015-registry-v2/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/015-registry-v2/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/015-registry-v2/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/016-sync-reconcile/checklists/requirements.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/016-sync-reconcile/contracts/cli-sync.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/016-sync-reconcile/contracts/provider-probe.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/016-sync-reconcile/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/016-sync-reconcile/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/016-sync-reconcile/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/016-sync-reconcile/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/016-sync-reconcile/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/016-sync-reconcile/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/017-web-adopt-simplify/checklists/requirements.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/017-web-adopt-simplify/contracts/cli-web-push.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/017-web-adopt-simplify/contracts/cli-web-status.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/017-web-adopt-simplify/contracts/revocation.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/017-web-adopt-simplify/contracts/setup-status-marker.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/017-web-adopt-simplify/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/017-web-adopt-simplify/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/017-web-adopt-simplify/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/017-web-adopt-simplify/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/017-web-adopt-simplify/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/017-web-adopt-simplify/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/018-provider-abstraction/baseline-notes.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/018-provider-abstraction/checklists/requirements.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/018-provider-abstraction/contracts/cli-surface.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/018-provider-abstraction/contracts/errors.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/018-provider-abstraction/contracts/lifecycle-templates.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/018-provider-abstraction/contracts/provider-protocol.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/018-provider-abstraction/contracts/sync-merge.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/018-provider-abstraction/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/018-provider-abstraction/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/018-provider-abstraction/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/018-provider-abstraction/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/018-provider-abstraction/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/018-provider-abstraction/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/019-hygiene-deps-docs/checklists/requirements.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/019-hygiene-deps-docs/contracts/cli-surface-delta.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/019-hygiene-deps-docs/contracts/docs-structure-check.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/019-hygiene-deps-docs/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/019-hygiene-deps-docs/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/019-hygiene-deps-docs/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/019-hygiene-deps-docs/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/019-hygiene-deps-docs/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/019-hygiene-deps-docs/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/020-openapi-type-generation/checklists/requirements.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/020-openapi-type-generation/contracts/drift-checks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/020-openapi-type-generation/contracts/terminal-frames-v1.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/020-openapi-type-generation/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/020-openapi-type-generation/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/020-openapi-type-generation/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/020-openapi-type-generation/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/020-openapi-type-generation/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/020-openapi-type-generation/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/021-cli-plane-separation/contracts/cli-surface.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/021-cli-plane-separation/contracts/descriptor-schema.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/021-cli-plane-separation/data-model.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/021-cli-plane-separation/plan.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/021-cli-plane-separation/quickstart.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/021-cli-plane-separation/research.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/021-cli-plane-separation/spec.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/specs/021-cli-plane-separation/tasks.md +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/__main__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/cli/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/cli/added.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/cli/cp.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/cli/main.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/cli/providers/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/cli/providers/factory.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/cli/shell.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/cli/web.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/ansible_runner.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/completion.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/config.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/errors.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/known_hosts.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/lifecycle.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/output.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/picker.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/provider_protocol.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/provider_registry.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/reconcile.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/registry.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/remo_host_client.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/rsync.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/snapshot.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/ssh.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/validation.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/version.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/web_adopt.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/core/web_drift.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/models/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/models/capability.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/models/discovery.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/models/host.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/models/session_target.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/models/snapshot.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/providers/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/providers/added.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/providers/aws.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/providers/aws_descriptor.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/providers/builtin.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/providers/hetzner.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/providers/hetzner_descriptor.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/providers/incus.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/providers/incus_descriptor.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/providers/proxmox.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/providers/proxmox_descriptor.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/api/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/api/hosts.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/api/pairing.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/api/setup.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/api/terminals.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/app.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/check.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/config.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/discovery.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/frames.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/health.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/logging_config.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/models.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/operator_auth.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/pairing.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/ssh_master.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/state.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/terminal.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/terminal_registry.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/src/remo_cli/web/tokens.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/ansible/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/ansible/test_apt_sources_repair.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/ansible/test_authorized_keys_bootstrap.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/ansible/test_remo_host_idempotency.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/ansible/test_ssh_configure_connection.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/ansible/test_user_setup_docker_group.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/conftest.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/image/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/image/test_docker_image.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/_nine_terminal_fixture.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/fish_completion.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/orbstack-cloud-init.yml +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/orbstack.sh +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/test_nine_terminals.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/test_nine_terminals_soak.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/test_registry_concurrency.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/test_remo_host_e2e.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/test_security_rejections.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/test_setup_payload_versions.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/test_sync_reconcile.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/test_terminal_attach.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/test_web_adopt_e2e.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/integration/test_web_cli_parity.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/perf/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/perf/test_latency.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/perf/test_registry_perf.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/providers/test_aws_snapshot.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/providers/test_hetzner_snapshot.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/providers/test_incus_snapshot.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/providers/test_incus_sync_all.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/providers/test_proxmox_snapshot.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/providers/test_proxmox_sync_all.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/surface_baseline.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/test_add_cmd.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/test_cli_uniformity.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/test_configure_cmd.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/test_cp.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/test_main.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/test_remove_cmd.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/test_shell.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/test_shell_added.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/test_startup_imports.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/test_surface_preservation.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/cli/test_web_adopt_cmd.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_ansible_runner.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_completion.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_config.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_errors.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_known_hosts.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_lifecycle.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_migration_tagging_notice.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_output.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_picker.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_provider_registry.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_reconcile.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_registry_format.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_registry_locking.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_registry_migration.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_remo_host_client.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_rsync.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_snapshot.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_ssh.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_ssh_added.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_ssh_controlpath.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_ssh_identity_opts.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_validation.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_version.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_web_adopt_authorize.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_web_adopt_code.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_web_adopt_payload.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_web_adopt_trust.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_web_drift.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_web_push.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/core/test_web_push_self_heal.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/models/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/models/test_capability.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/models/test_discovery.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/models/test_session_target.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/fake_provider.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_added_add.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_added_configure.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_added_provider_guard.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_added_update_remove.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_added_verify.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_aws_provider_protocol.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_aws_snapshot.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_aws_sync.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_aws_upgrade_resize.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_hetzner_entry_adapters.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_hetzner_http.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_hetzner_label.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_hetzner_resize.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_hetzner_snapshot.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_hetzner_sync.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_host_user_consistency.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_incus_entry_adapters.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_incus_marker.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_incus_resize.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_incus_snapshot.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_incus_sync.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_missing_sdk.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_provider_conformance.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_provider_registry_entries.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_proxmox_devcontainer_runtime.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_proxmox_marker.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_proxmox_provider_protocol.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_proxmox_resize.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_proxmox_snapshot.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/providers/test_proxmox_sync.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/test_ansible_templates.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/test_architecture.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/test_docs_structure.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/test_host_model.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/test_host_ssh_type.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/test_lockfile_version.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/test_schema_drift.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/__init__.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/_pairing_support.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/conftest.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/fixtures/hosts_response.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/fixtures/sessions_response.json +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_backpressure.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_check.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_csp.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_discovery.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_discovery_refresh_force.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_frames.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_health_states.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_hosts_mapping.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_lazy_import.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_log_redaction.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_mint_gating.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_operator_auth.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_pairing.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_pairing_origin.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_payload_equivalence.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_registry_readonly.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_service_identity_selection.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_setup_api.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_setup_auth.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_setup_dormancy.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_state.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_terminal_resize.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_terminals_api.py +0 -0
- {remo_cli-4.3.1 → remo_cli-4.3.3}/tests/unit/web/test_tokens.py +0 -0
|
@@ -17,7 +17,7 @@ jobs:
|
|
|
17
17
|
steps:
|
|
18
18
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
19
19
|
|
|
20
|
-
- uses: astral-sh/setup-uv@
|
|
20
|
+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
21
21
|
|
|
22
22
|
- name: Set up Python ${{ matrix.python-version }}
|
|
23
23
|
run: uv python install ${{ matrix.python-version }}
|
|
@@ -48,7 +48,7 @@ jobs:
|
|
|
48
48
|
|
|
49
49
|
- uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4
|
|
50
50
|
|
|
51
|
-
- uses: astral-sh/setup-uv@
|
|
51
|
+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
52
52
|
|
|
53
53
|
- name: Install dependencies
|
|
54
54
|
run: uv sync --all-extras
|
|
@@ -70,7 +70,7 @@ jobs:
|
|
|
70
70
|
steps:
|
|
71
71
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
72
72
|
|
|
73
|
-
- uses: astral-sh/setup-uv@
|
|
73
|
+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
74
74
|
|
|
75
75
|
- name: Build wheel
|
|
76
76
|
run: uv build --wheel
|
|
@@ -98,7 +98,7 @@ jobs:
|
|
|
98
98
|
steps:
|
|
99
99
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
100
100
|
|
|
101
|
-
- uses: astral-sh/setup-uv@
|
|
101
|
+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
102
102
|
|
|
103
103
|
- name: Install fish
|
|
104
104
|
run: |
|
|
@@ -124,7 +124,7 @@ jobs:
|
|
|
124
124
|
steps:
|
|
125
125
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
126
126
|
|
|
127
|
-
- uses: astral-sh/setup-uv@
|
|
127
|
+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
128
128
|
|
|
129
129
|
- name: Install dependencies
|
|
130
130
|
run: uv sync --all-extras
|
|
@@ -144,7 +144,7 @@ jobs:
|
|
|
144
144
|
runs-on: ubuntu-latest
|
|
145
145
|
# Fast, backend-free coverage of the SPA: tsc typecheck, the Vitest
|
|
146
146
|
# unit/component suite (frontend/src/**/*.test.ts), and a production build.
|
|
147
|
-
# The Playwright e2e suite (tests/e2e) is NOT run here — it needs a live
|
|
147
|
+
# The Playwright e2e suite (frontend/tests/e2e) is NOT run here — it needs a live
|
|
148
148
|
# `remo web serve` backend (REMO_E2E_BASE_URL); see playwright.config.ts.
|
|
149
149
|
defaults:
|
|
150
150
|
run:
|
|
@@ -33,12 +33,12 @@ jobs:
|
|
|
33
33
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
34
34
|
|
|
35
35
|
- name: Initialize CodeQL
|
|
36
|
-
uses: github/codeql-action/init@
|
|
36
|
+
uses: github/codeql-action/init@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
|
|
37
37
|
with:
|
|
38
38
|
languages: ${{ matrix.language }}
|
|
39
39
|
build-mode: ${{ matrix.build-mode }}
|
|
40
40
|
|
|
41
41
|
- name: Perform CodeQL Analysis
|
|
42
|
-
uses: github/codeql-action/analyze@
|
|
42
|
+
uses: github/codeql-action/analyze@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
|
|
43
43
|
with:
|
|
44
44
|
category: "/language:${{ matrix.language }}"
|
|
@@ -13,6 +13,6 @@ jobs:
|
|
|
13
13
|
runs-on: ubuntu-latest
|
|
14
14
|
steps:
|
|
15
15
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
16
|
-
- uses: actions/dependency-review-action@
|
|
16
|
+
- uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v4
|
|
17
17
|
with:
|
|
18
18
|
fail-on-severity: high
|
|
@@ -34,7 +34,7 @@ jobs:
|
|
|
34
34
|
with:
|
|
35
35
|
fetch-depth: 0
|
|
36
36
|
|
|
37
|
-
- uses: astral-sh/setup-uv@
|
|
37
|
+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
38
38
|
|
|
39
39
|
- name: Compute dev version
|
|
40
40
|
id: ver
|
|
@@ -70,7 +70,7 @@ jobs:
|
|
|
70
70
|
- name: Upload artifact
|
|
71
71
|
# NOTE: SHA-pin to match the repo's action-pinning convention once the
|
|
72
72
|
# v4 commit SHA is available (e.g. `@<sha> # v4`).
|
|
73
|
-
uses: actions/upload-artifact@
|
|
73
|
+
uses: actions/upload-artifact@v7
|
|
74
74
|
with:
|
|
75
75
|
name: remo-wheel
|
|
76
76
|
path: dist/*
|
|
@@ -19,7 +19,7 @@ jobs:
|
|
|
19
19
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
20
20
|
|
|
21
21
|
- name: Install uv
|
|
22
|
-
uses: astral-sh/setup-uv@
|
|
22
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
23
23
|
|
|
24
24
|
- name: Install Ansible and dependencies
|
|
25
25
|
run: |
|
|
@@ -42,7 +42,7 @@ jobs:
|
|
|
42
42
|
app-id: ${{ vars.RELEASE_PLEASE_APP_ID }}
|
|
43
43
|
private-key: ${{ secrets.RELEASE_PLEASE_APP_KEY }}
|
|
44
44
|
|
|
45
|
-
- uses: googleapis/release-please-action@
|
|
45
|
+
- uses: googleapis/release-please-action@v5
|
|
46
46
|
id: release
|
|
47
47
|
with:
|
|
48
48
|
# Token precedence:
|
|
@@ -68,16 +68,26 @@ jobs:
|
|
|
68
68
|
# but this job runs immediately after that refresh on every push to main,
|
|
69
69
|
# so the commit is simply re-made. `tests/unit/test_lockfile_version.py`
|
|
70
70
|
# is the backstop that keeps a drifted lockfile from merging at all.
|
|
71
|
-
- uses: astral-sh/setup-uv@
|
|
71
|
+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
72
72
|
if: ${{ steps.release.outputs.pr }}
|
|
73
73
|
|
|
74
|
+
# `pr` is passed through as raw JSON and parsed in the shell rather than
|
|
75
|
+
# with `fromJSON(...)` here. A step's `env:` expressions are evaluated even
|
|
76
|
+
# when its `if:` is false, and on the push that MERGES a release there are
|
|
77
|
+
# no new commits, so release-please emits no PR and `outputs.pr` is the
|
|
78
|
+
# empty string — `fromJSON('')` then fails the whole job with "Error
|
|
79
|
+
# reading JToken from JsonReader", after the tag and publish have already
|
|
80
|
+
# succeeded. That made this workflow red after every single release and
|
|
81
|
+
# would have masked a real failure. The neighbouring setup-uv step, which
|
|
82
|
+
# has the same `if:` but no `env:`, skipped correctly throughout.
|
|
74
83
|
- name: Sync uv.lock onto the release PR
|
|
75
84
|
if: ${{ steps.release.outputs.pr }}
|
|
76
85
|
env:
|
|
77
|
-
|
|
86
|
+
RELEASE_PR: ${{ steps.release.outputs.pr }}
|
|
78
87
|
GH_TOKEN: ${{ steps.app-token.outputs.token || secrets.RELEASE_PLEASE_TOKEN || secrets.GITHUB_TOKEN }}
|
|
79
88
|
run: |
|
|
80
89
|
set -euo pipefail
|
|
90
|
+
RELEASE_BRANCH="$(jq -er '.headBranchName' <<<"$RELEASE_PR")"
|
|
81
91
|
git clone --branch "$RELEASE_BRANCH" --depth 1 \
|
|
82
92
|
"https://x-access-token:${GH_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" release-pr
|
|
83
93
|
cd release-pr
|
|
@@ -15,7 +15,7 @@ jobs:
|
|
|
15
15
|
steps:
|
|
16
16
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
17
17
|
|
|
18
|
-
- uses: astral-sh/setup-uv@
|
|
18
|
+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
19
19
|
|
|
20
20
|
- name: Set up Python ${{ matrix.python-version }}
|
|
21
21
|
run: uv python install ${{ matrix.python-version }}
|
|
@@ -155,7 +155,7 @@ jobs:
|
|
|
155
155
|
steps:
|
|
156
156
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
157
157
|
|
|
158
|
-
- uses: astral-sh/setup-uv@
|
|
158
|
+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
159
159
|
|
|
160
160
|
- name: Build package
|
|
161
161
|
run: uv build
|
|
@@ -52,7 +52,7 @@ jobs:
|
|
|
52
52
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
53
53
|
|
|
54
54
|
- name: Install uv
|
|
55
|
-
uses: astral-sh/setup-uv@
|
|
55
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
56
56
|
|
|
57
57
|
- name: Install remo
|
|
58
58
|
run: uv sync
|
|
@@ -219,7 +219,7 @@ jobs:
|
|
|
219
219
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
220
220
|
|
|
221
221
|
- name: Install uv
|
|
222
|
-
uses: astral-sh/setup-uv@
|
|
222
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
223
223
|
|
|
224
224
|
- name: Install remo
|
|
225
225
|
run: uv sync
|
|
@@ -338,7 +338,7 @@ jobs:
|
|
|
338
338
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
339
339
|
|
|
340
340
|
- name: Install uv
|
|
341
|
-
uses: astral-sh/setup-uv@
|
|
341
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
342
342
|
|
|
343
343
|
- name: Install remo
|
|
344
344
|
run: uv sync
|
|
@@ -19,7 +19,7 @@ jobs:
|
|
|
19
19
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
20
20
|
|
|
21
21
|
- name: Install uv
|
|
22
|
-
uses: astral-sh/setup-uv@
|
|
22
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
23
23
|
|
|
24
24
|
- name: Install Ansible and dependencies
|
|
25
25
|
run: |
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [4.3.3](https://github.com/get2knowio/remo/compare/v4.3.2...v4.3.3) (2026-08-06)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **test:** make `npm run test:e2e` actually runnable ([#151](https://github.com/get2knowio/remo/issues/151)) ([050f71a](https://github.com/get2knowio/remo/commit/050f71a48965e67c2a410e4c2c09f5f20c8ce8e3))
|
|
9
|
+
|
|
10
|
+
## [4.3.2](https://github.com/get2knowio/remo/compare/v4.3.1...v4.3.2) (2026-08-05)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **ci:** stop release-please failing on every release ([#147](https://github.com/get2knowio/remo/issues/147)) ([1e78e8d](https://github.com/get2knowio/remo/commit/1e78e8dc65f36c8f8f143a7e9eb77dbd5749b69f))
|
|
16
|
+
|
|
3
17
|
## [4.3.1](https://github.com/get2knowio/remo/compare/v4.3.0...v4.3.1) (2026-08-05)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: remo-cli
|
|
3
|
-
Version: 4.3.
|
|
3
|
+
Version: 4.3.3
|
|
4
4
|
Summary: Remote development environment CLI
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -343,6 +343,22 @@ after your macOS account holding UID 1000, and registering *that* user is what
|
|
|
343
343
|
puts `remo-host` in the home directory the web service logs into, while skipping
|
|
344
344
|
`user_setup`'s UID-1000 reassignment entirely.
|
|
345
345
|
|
|
346
|
+
To reach the VM from anywhere — your workstation, a homelab box, or the
|
|
347
|
+
`remo web` service — rather than only from its Mac, use
|
|
348
|
+
[`docs/examples/orbstack-cloud-init-tailscale.yaml`](docs/examples/orbstack-cloud-init-tailscale.yaml)
|
|
349
|
+
instead. Same file plus Tailscale; it prints the address to register on first
|
|
350
|
+
boot. Register the MagicDNS name, **not** the OrbStack IP:
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
orb create ubuntu remo-mbp -c docs/examples/orbstack-cloud-init-tailscale.yaml
|
|
354
|
+
remo add mbp <user>@remo-mbp.<your-tailnet>.ts.net --verify
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
An OrbStack VM's own IP is reachable from its Mac and nowhere else, so a
|
|
358
|
+
registry entry pointing at it is useless to a `remo web` service running
|
|
359
|
+
anywhere else. Use an **ephemeral** auth key: cloud-init keeps your user-data
|
|
360
|
+
on the VM's disk, so the key outlives the boot that used it.
|
|
361
|
+
|
|
346
362
|
`remo remove NAME [--yes]` deregisters an added host by deleting **only** the
|
|
347
363
|
local registry entry — it makes no connection to and no change on the remote
|
|
348
364
|
environment (unlike a provider `destroy`, which tears down infrastructure). It
|
|
@@ -317,6 +317,22 @@ after your macOS account holding UID 1000, and registering *that* user is what
|
|
|
317
317
|
puts `remo-host` in the home directory the web service logs into, while skipping
|
|
318
318
|
`user_setup`'s UID-1000 reassignment entirely.
|
|
319
319
|
|
|
320
|
+
To reach the VM from anywhere — your workstation, a homelab box, or the
|
|
321
|
+
`remo web` service — rather than only from its Mac, use
|
|
322
|
+
[`docs/examples/orbstack-cloud-init-tailscale.yaml`](docs/examples/orbstack-cloud-init-tailscale.yaml)
|
|
323
|
+
instead. Same file plus Tailscale; it prints the address to register on first
|
|
324
|
+
boot. Register the MagicDNS name, **not** the OrbStack IP:
|
|
325
|
+
|
|
326
|
+
```bash
|
|
327
|
+
orb create ubuntu remo-mbp -c docs/examples/orbstack-cloud-init-tailscale.yaml
|
|
328
|
+
remo add mbp <user>@remo-mbp.<your-tailnet>.ts.net --verify
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
An OrbStack VM's own IP is reachable from its Mac and nowhere else, so a
|
|
332
|
+
registry entry pointing at it is useless to a `remo web` service running
|
|
333
|
+
anywhere else. Use an **ephemeral** auth key: cloud-init keeps your user-data
|
|
334
|
+
on the VM's disk, so the key outlives the boot that used it.
|
|
335
|
+
|
|
320
336
|
`remo remove NAME [--yes]` deregisters an added host by deleting **only** the
|
|
321
337
|
local registry entry — it makes no connection to and no change on the remote
|
|
322
338
|
environment (unlike a provider `destroy`, which tears down infrastructure). It
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
#cloud-config
|
|
2
|
+
#
|
|
3
|
+
# OrbStack VM prepared for `remo add` + `remo configure`, joined to your
|
|
4
|
+
# Tailscale tailnet (remo >= 4.3.0).
|
|
5
|
+
#
|
|
6
|
+
# orb create ubuntu remo-mbp -c orbstack-cloud-init-tailscale.yaml
|
|
7
|
+
#
|
|
8
|
+
# This is `orbstack-cloud-init.yaml` plus Tailscale. Everything that file says
|
|
9
|
+
# still applies: it installs only what Ansible needs to connect and take over,
|
|
10
|
+
# and it creates no user — OrbStack already makes one named after your macOS
|
|
11
|
+
# account holding UID 1000, and registering *that* user is what puts remo-host
|
|
12
|
+
# in the home directory `remo web` discovery logs into while skipping
|
|
13
|
+
# user_setup's UID-1000 reassignment.
|
|
14
|
+
#
|
|
15
|
+
# WHY YOU WANT THIS ONE
|
|
16
|
+
#
|
|
17
|
+
# An OrbStack VM's own IP is reachable from its Mac and nowhere else. That is
|
|
18
|
+
# fine when remo runs on the same Mac, and useless the moment you want the
|
|
19
|
+
# workstation, your homelab box, or the `remo web` service to reach it. Joining
|
|
20
|
+
# the tailnet gives the VM a stable address that works from anywhere you are
|
|
21
|
+
# already logged in — the same way you reach dev1.
|
|
22
|
+
#
|
|
23
|
+
# The practical consequence for remo: register the MagicDNS name, not the
|
|
24
|
+
# OrbStack IP.
|
|
25
|
+
#
|
|
26
|
+
# remo add mbp <user>@remo-mbp.<your-tailnet>.ts.net --verify
|
|
27
|
+
#
|
|
28
|
+
# That address is what gets stored in the registry and pushed to the web
|
|
29
|
+
# service, so it must be one the service can resolve too — i.e. the service
|
|
30
|
+
# host must also be on the tailnet.
|
|
31
|
+
|
|
32
|
+
# ---------------------------------------------------------------------------
|
|
33
|
+
# EDIT THIS (1/2): the public key of the workstation that will run `remo`.
|
|
34
|
+
# ---------------------------------------------------------------------------
|
|
35
|
+
# Leave the placeholder and cloud-init keeps password auth enabled rather than
|
|
36
|
+
# locking you out of a keyless VM (see the guard in runcmd).
|
|
37
|
+
ssh_authorized_keys:
|
|
38
|
+
- ssh-ed25519 AAAA_REPLACE_WITH_YOUR_PUBLIC_KEY workstation
|
|
39
|
+
|
|
40
|
+
package_update: true
|
|
41
|
+
packages:
|
|
42
|
+
# Ansible needs a Python 3 interpreter on the target.
|
|
43
|
+
- python3
|
|
44
|
+
# hwclock, which `community.general.timezone` — the first task in remo's
|
|
45
|
+
# shared role list — hard-fails without. On Ubuntu 24.04 it lives here, and
|
|
46
|
+
# minimal images do not install it.
|
|
47
|
+
- util-linux-extra
|
|
48
|
+
- openssh-server
|
|
49
|
+
# `remo configure` installs rsync itself; having it up front means `remo cp`
|
|
50
|
+
# works the moment the host is registered.
|
|
51
|
+
- rsync
|
|
52
|
+
# For the Tailscale install script.
|
|
53
|
+
- curl
|
|
54
|
+
|
|
55
|
+
write_files:
|
|
56
|
+
- path: /etc/ssh/sshd_config.d/10-remo.conf
|
|
57
|
+
permissions: '0644'
|
|
58
|
+
content: |
|
|
59
|
+
# Managed by cloud-init for remo. Ubuntu's sshd_config Includes this dir.
|
|
60
|
+
Port 22
|
|
61
|
+
PubkeyAuthentication yes
|
|
62
|
+
|
|
63
|
+
# ---------------------------------------------------------------------------
|
|
64
|
+
# EDIT THIS (2/2): a Tailscale auth key.
|
|
65
|
+
# ---------------------------------------------------------------------------
|
|
66
|
+
# Generate one at https://login.tailscale.com/admin/settings/keys
|
|
67
|
+
#
|
|
68
|
+
# Make it **ephemeral** and **pre-approved**, and tag it (e.g. `tag:remo`).
|
|
69
|
+
# Ephemeral matters here for a real reason: cloud-init writes this user-data
|
|
70
|
+
# to disk on the VM (/var/lib/cloud/instance/user-data.txt) and keeps it, so
|
|
71
|
+
# the key outlives the boot that used it. An ephemeral key expires on its own
|
|
72
|
+
# and its node is reaped when it goes offline, which bounds the damage if the
|
|
73
|
+
# VM image or a snapshot is ever shared. A reusable non-expiring key in this
|
|
74
|
+
# file is a standing credential to your tailnet.
|
|
75
|
+
#
|
|
76
|
+
# Keep this file out of version control once you put a real key in it.
|
|
77
|
+
- path: /etc/remo-tailscale.env
|
|
78
|
+
permissions: '0600'
|
|
79
|
+
owner: root:root
|
|
80
|
+
content: |
|
|
81
|
+
TS_AUTHKEY=tskey-auth-REPLACE_WITH_YOUR_AUTH_KEY
|
|
82
|
+
# The machine name on your tailnet; MagicDNS makes this
|
|
83
|
+
# <hostname>.<your-tailnet>.ts.net
|
|
84
|
+
TS_HOSTNAME=remo-mbp
|
|
85
|
+
|
|
86
|
+
runcmd:
|
|
87
|
+
# Install the key on whichever account holds UID 1000 — OrbStack names it
|
|
88
|
+
# after your macOS user, so it cannot be hardcoded here.
|
|
89
|
+
- |
|
|
90
|
+
set -eu
|
|
91
|
+
KEY='ssh-ed25519 AAAA_REPLACE_WITH_YOUR_PUBLIC_KEY workstation'
|
|
92
|
+
USER_1000="$(getent passwd 1000 | cut -d: -f1)"
|
|
93
|
+
if [ -z "$USER_1000" ]; then
|
|
94
|
+
echo "remo-cloud-init: no UID 1000 account; skipping key install" >&2
|
|
95
|
+
exit 0
|
|
96
|
+
fi
|
|
97
|
+
HOME_1000="$(getent passwd 1000 | cut -d: -f6)"
|
|
98
|
+
install -d -m 700 -o "$USER_1000" -g "$USER_1000" "$HOME_1000/.ssh"
|
|
99
|
+
touch "$HOME_1000/.ssh/authorized_keys"
|
|
100
|
+
case "$KEY" in
|
|
101
|
+
*REPLACE_WITH_YOUR_PUBLIC_KEY*)
|
|
102
|
+
echo "remo-cloud-init: placeholder key not replaced; leaving password auth as-is" >&2
|
|
103
|
+
;;
|
|
104
|
+
*)
|
|
105
|
+
grep -qxF "$KEY" "$HOME_1000/.ssh/authorized_keys" \
|
|
106
|
+
|| echo "$KEY" >> "$HOME_1000/.ssh/authorized_keys"
|
|
107
|
+
echo 'PasswordAuthentication no' > /etc/ssh/sshd_config.d/20-remo-hardening.conf
|
|
108
|
+
;;
|
|
109
|
+
esac
|
|
110
|
+
chown -R "$USER_1000:$USER_1000" "$HOME_1000/.ssh"
|
|
111
|
+
chmod 600 "$HOME_1000/.ssh/authorized_keys"
|
|
112
|
+
|
|
113
|
+
# Passwordless sudo. OrbStack already grants it; the explicit drop-in makes
|
|
114
|
+
# this file work on a plain cloud image too. `remo configure` probes for it
|
|
115
|
+
# up front rather than failing halfway through.
|
|
116
|
+
- |
|
|
117
|
+
set -eu
|
|
118
|
+
USER_1000="$(getent passwd 1000 | cut -d: -f1)"
|
|
119
|
+
[ -n "$USER_1000" ] || exit 0
|
|
120
|
+
echo "$USER_1000 ALL=(ALL) NOPASSWD:ALL" > "/etc/sudoers.d/90-remo-$USER_1000"
|
|
121
|
+
chmod 440 "/etc/sudoers.d/90-remo-$USER_1000"
|
|
122
|
+
|
|
123
|
+
- systemctl enable --now ssh
|
|
124
|
+
- systemctl restart ssh
|
|
125
|
+
|
|
126
|
+
# Tailscale, via the vendor install script (what Tailscale's own cloud-init
|
|
127
|
+
# documentation uses). It adds the apt repo and installs tailscaled.
|
|
128
|
+
- curl -fsSL https://tailscale.com/install.sh | sh
|
|
129
|
+
|
|
130
|
+
# Join the tailnet. Split from the install so a bad key fails visibly here
|
|
131
|
+
# rather than looking like an install failure.
|
|
132
|
+
- |
|
|
133
|
+
set -eu
|
|
134
|
+
. /etc/remo-tailscale.env
|
|
135
|
+
case "${TS_AUTHKEY:-}" in
|
|
136
|
+
''|*REPLACE_WITH_YOUR_AUTH_KEY*)
|
|
137
|
+
# Not fatal: the VM is still perfectly usable over its OrbStack IP from
|
|
138
|
+
# this Mac. Only the reach-it-from-anywhere part is missing.
|
|
139
|
+
echo "remo-cloud-init: no Tailscale auth key set — installed tailscaled but did not join." >&2
|
|
140
|
+
echo " Join later with: sudo tailscale up --hostname=${TS_HOSTNAME:-remo-mbp}" >&2
|
|
141
|
+
exit 0
|
|
142
|
+
;;
|
|
143
|
+
esac
|
|
144
|
+
tailscale up --auth-key="$TS_AUTHKEY" --hostname="${TS_HOSTNAME:-remo-mbp}"
|
|
145
|
+
# The key has been redeemed; it does not need to stay readable on disk.
|
|
146
|
+
# (The copy cloud-init keeps in /var/lib/cloud is why an ephemeral key is
|
|
147
|
+
# recommended above — this only removes the copy we created.)
|
|
148
|
+
rm -f /etc/remo-tailscale.env
|
|
149
|
+
|
|
150
|
+
# Report the address to register, so it is in the console output rather than
|
|
151
|
+
# something you have to go and look up.
|
|
152
|
+
- |
|
|
153
|
+
set -eu
|
|
154
|
+
command -v tailscale >/dev/null 2>&1 || exit 0
|
|
155
|
+
tailscale status --json >/dev/null 2>&1 || exit 0
|
|
156
|
+
# Parse the JSON properly rather than grepping for the first "DNSName":
|
|
157
|
+
# peers have that field too, so a text match can hand back a DIFFERENT
|
|
158
|
+
# machine on your tailnet and tell you to register it. python3 is present
|
|
159
|
+
# (it is in `packages` above, because Ansible needs it anyway).
|
|
160
|
+
NAME="$(tailscale status --json | python3 -c \
|
|
161
|
+
'import json,sys; print(json.load(sys.stdin)["Self"]["DNSName"].rstrip("."))' 2>/dev/null || true)"
|
|
162
|
+
ADDR="$(tailscale ip -4 2>/dev/null | head -1)"
|
|
163
|
+
[ -n "$NAME" ] || exit 0
|
|
164
|
+
USER_1000="$(getent passwd 1000 | cut -d: -f1)"
|
|
165
|
+
echo "remo-cloud-init: tailnet name=${NAME} addr=${ADDR:-none}"
|
|
166
|
+
echo "remo-cloud-init: register with -> remo add mbp ${USER_1000}@${NAME} --verify"
|
|
167
|
+
|
|
168
|
+
final_message: |
|
|
169
|
+
remo-ready after $UPTIME seconds.
|
|
170
|
+
|
|
171
|
+
This VM is on your tailnet. Register the MagicDNS name, NOT the OrbStack IP —
|
|
172
|
+
the OrbStack address only works from this Mac, which defeats the point:
|
|
173
|
+
|
|
174
|
+
remo add mbp <user>@remo-mbp.<your-tailnet>.ts.net --verify
|
|
175
|
+
remo configure mbp
|
|
176
|
+
remo web push # the web service must be on the tailnet too
|
|
177
|
+
|
|
178
|
+
The exact name and address were printed above by cloud-init; `tailscale
|
|
179
|
+
status` on the VM will show them again.
|
|
180
|
+
|
|
181
|
+
Do not pass `--skip docker` to configure: the shared role list adds the user
|
|
182
|
+
to the docker group, which only exists if the docker role ran.
|