remo-cli 4.0.0__tar.gz → 4.0.1__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.0.1/.release-please-manifest.json +3 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/CHANGELOG.md +8 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/PKG-INFO +1 -1
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/TerminalCard.css +11 -4
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/TerminalCard.test.tsx +57 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/TerminalCard.tsx +112 -3
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/theme/terminalThemes.test.ts +51 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/theme/terminalThemes.ts +11 -2
- {remo_cli-4.0.0 → remo_cli-4.0.1}/pyproject.toml +1 -1
- {remo_cli-4.0.0 → remo_cli-4.0.1}/uv.lock +1 -1
- remo_cli-4.0.0/.release-please-manifest.json +0 -3
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/release/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-analyze/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-checklist/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-clarify/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-constitution/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-converge/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-git-commit/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-git-feature/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-git-initialize/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-git-remote/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-git-validate/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-implement/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-plan/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-specify/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-tasks/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.claude/skills/speckit-taskstoissues/SKILL.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.devcontainer/devcontainer.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.dockerignore +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.github/CODEOWNERS +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.github/dependabot.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.github/workflows/ci.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.github/workflows/codeql.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.github/workflows/dependency-review.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.github/workflows/dev-build.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.github/workflows/provision.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.github/workflows/release-please.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.github/workflows/release.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.github/workflows/smoke-test-cleanup.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.github/workflows/smoke-test.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.github/workflows/teardown.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.gitignore +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.maverick/checkpoints/feature/implementation_complete.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.maverick/checkpoints/feature/phase_${{ index }}_complete.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.maverick/checkpoints/feature/validation_complete.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/.registry +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/README.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/commands/speckit.git.commit.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/commands/speckit.git.feature.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/commands/speckit.git.initialize.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/commands/speckit.git.remote.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/commands/speckit.git.validate.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/config-template.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/extension.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/git-config.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/scripts/bash/auto-commit.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/scripts/bash/create-new-feature.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/scripts/bash/git-common.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/scripts/powershell/create-new-feature.ps1 +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/feature.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/init-options.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/integration.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/integrations/claude.manifest.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/integrations/speckit.manifest.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/memory/constitution.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/scripts/bash/common.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/scripts/bash/setup-plan.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/scripts/bash/setup-tasks.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/templates/agent-file-template.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/templates/checklist-template.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/templates/constitution-template.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/templates/plan-template.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/templates/spec-template.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/templates/tasks-template.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/workflows/speckit/workflow.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/workflows/workflow-registry.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/AGENTS.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/CLAUDE.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/CONTRIBUTING.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/Dockerfile +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/LICENSE +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/README.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/SECURITY.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/.ansible-lint +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/README.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/ansible.cfg +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/aws_configure.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/aws_resize.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/aws_site.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/aws_teardown.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/group_vars/all.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/group_vars/incus_containers.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/group_vars/proxmox_containers.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/hetzner_configure.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/hetzner_provision.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/hetzner_resize.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/hetzner_site.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/hetzner_teardown.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/incus_bootstrap.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/incus_configure.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/incus_provision.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/incus_resize.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/incus_site.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/incus_teardown.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/inventory/hosts.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/inventory/incus_containers.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/proxmox_bootstrap.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/proxmox_configure.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/proxmox_provision.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/proxmox_resize.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/proxmox_site.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/proxmox_teardown.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/requirements.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/aws_server/defaults/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/aws_server/tasks/ebs.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/aws_server/tasks/ec2.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/aws_server/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/aws_server/tasks/patch_manager.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/aws_server/tasks/preflight.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/aws_server/tasks/security_group.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/deacon/defaults/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/deacon/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/devcontainers/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/docker/handlers/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/docker/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/fzf/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/github_cli/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/hetzner_server/defaults/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/hetzner_server/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/incus_bootstrap/defaults/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/incus_bootstrap/handlers/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/incus_bootstrap/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/incus_container/defaults/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/incus_container/handlers/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/incus_container/meta/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/incus_container/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/incus_container/tasks/preflight.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/incus_container_teardown/defaults/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/incus_container_teardown/meta/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/incus_container_teardown/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/nodejs/defaults/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/nodejs/files/nodesource-repo.gpg.key +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/nodejs/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/proxmox_bootstrap/defaults/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/proxmox_bootstrap/meta/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/proxmox_bootstrap/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/proxmox_container/defaults/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/proxmox_container/handlers/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/proxmox_container/meta/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/proxmox_container/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/proxmox_container/tasks/preflight.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/proxmox_container_teardown/defaults/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/proxmox_container_teardown/meta/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/proxmox_container_teardown/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/user_setup/defaults/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/user_setup/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/user_setup/templates/devshell.sh.j2 +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/user_setup/templates/project-launch.sh.j2 +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/user_setup/templates/project-menu.sh.j2 +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/user_setup/templates/remo-host.sh.j2 +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/zellij/defaults/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/zellij/tasks/main.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/zellij/templates/config.kdl.j2 +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/roles/zellij/templates/layouts/minimal.kdl.j2 +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/tasks/configure_dev_tools.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/ansible/tasks/repair_apt_sources.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docker/Dockerfile +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docker/compose.example.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docker/entrypoint.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docs/aws.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docs/feature-history.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docs/hetzner.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docs/incus.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docs/install.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docs/maintaining-claude-md.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docs/maintaining-generated-types.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docs/providers.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docs/proxmox.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docs/remo-web-speckit-input.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docs/remo-web.html +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/docs/web-session-interface.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/index.html +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/package-lock.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/package.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/scripts/check-types-fresh.mjs +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/scripts/generate-frame-types.mjs +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/scripts/generate-schema-types.mjs +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/api/client.test.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/api/client.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/api/generated/README.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/api/generated/openapi.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/api/generated/schema.d.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/api/generated/terminal-frames.d.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/api/generated/terminal-frames.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/api/generated.test.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/AppRoot.tsx +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/AppShell.css +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/AppShell.tsx +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/AwaitingAdoption.css +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/AwaitingAdoption.tsx +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/OfflineOverlay.css +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/OfflineOverlay.tsx +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/PairToSync.css +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/PairToSync.tsx +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/SessionRail.css +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/SessionRail.tsx +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/SettingsPage.css +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/SettingsPage.tsx +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/ShortcutsModal.css +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/ShortcutsModal.tsx +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/TopBar.css +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/TopBar.tsx +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/WorkspacePane.css +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/WorkspacePane.tsx +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/providerMeta.test.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/providerMeta.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/railModel.test.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/components/railModel.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/lib/clipboard.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/lib/fullscreen.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/main.tsx +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/state/discovery.test.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/state/discovery.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/state/fonts.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/state/health.test.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/state/health.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/state/latency.test.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/state/latency.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/state/settings.test.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/state/settings.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/state/useConsoleKeyboard.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/state/workspace.test.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/state/workspace.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/terminal/.gitkeep +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/terminal/RendererAdapter.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/terminal/TerminalConnection.test.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/terminal/TerminalConnection.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/terminal/XtermRenderer.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/terminal/defaultRenderer.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/terminal/keymap.test.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/terminal/keymap.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/test/setup.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/theme/fonts.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/src/theme/tokens.css +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/tsconfig.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/frontend/vite.config.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/install.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/maverick.yaml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/playwright.config.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/project-menu.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/release-please-config.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/remo +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/remo.svg +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/run.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/scripts/export_openapi.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/scripts/setup-aws-oidc.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/001-bootstrap-incus-host/checklists/requirements.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/001-bootstrap-incus-host/checklists/validation.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/001-bootstrap-incus-host/contracts/playbook-interface.yaml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/001-bootstrap-incus-host/contracts/role-interface.yaml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/001-bootstrap-incus-host/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/001-bootstrap-incus-host/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/001-bootstrap-incus-host/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/001-bootstrap-incus-host/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/001-bootstrap-incus-host/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/001-bootstrap-incus-host/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/002-incus-container-support/checklists/requirements.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/002-incus-container-support/contracts/playbook-interface.yaml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/002-incus-container-support/contracts/role-interface.yaml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/002-incus-container-support/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/002-incus-container-support/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/002-incus-container-support/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/002-incus-container-support/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/002-incus-container-support/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/002-incus-container-support/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/003-python-cli-rewrite/checklists/requirements.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/003-python-cli-rewrite/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/003-python-cli-rewrite/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/003-python-cli-rewrite/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/003-python-cli-rewrite/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/003-python-cli-rewrite/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/003-python-cli-rewrite/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/004-proxmox-container-support/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/005-provider-snapshots/checklists/requirements.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/005-provider-snapshots/contracts/cli-surface.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/005-provider-snapshots/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/005-provider-snapshots/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/005-provider-snapshots/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/005-provider-snapshots/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/005-provider-snapshots/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/005-provider-snapshots/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/010-web-session-interface/checklists/requirements.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/010-web-session-interface/contracts/remo-host-protocol.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/010-web-session-interface/contracts/rest-api.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/010-web-session-interface/contracts/terminal-websocket.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/010-web-session-interface/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/010-web-session-interface/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/010-web-session-interface/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/010-web-session-interface/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/010-web-session-interface/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/010-web-session-interface/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/011-web-adopt/checklists/requirements.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/011-web-adopt/contracts/cli-web-adopt.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/011-web-adopt/contracts/setup-api.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/011-web-adopt/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/011-web-adopt/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/011-web-adopt/quickstart-results.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/011-web-adopt/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/011-web-adopt/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/011-web-adopt/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/011-web-adopt/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/012-web-adopt-pairing/contracts/cli-web-adopt.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/012-web-adopt-pairing/contracts/pairing-api.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/012-web-adopt-pairing/contracts/setup-api.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/012-web-adopt-pairing/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/012-web-adopt-pairing/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/012-web-adopt-pairing/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/012-web-adopt-pairing/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/012-web-adopt-pairing/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/012-web-adopt-pairing/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/013-managed-instance-tags/contracts/cli-sync.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/013-managed-instance-tags/contracts/marker-commands.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/013-managed-instance-tags/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/013-managed-instance-tags/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/013-managed-instance-tags/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/013-managed-instance-tags/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/013-managed-instance-tags/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/013-managed-instance-tags/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/014-register-ssh-host/contracts/add-command.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/014-register-ssh-host/contracts/remove-command.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/014-register-ssh-host/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/014-register-ssh-host/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/014-register-ssh-host/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/014-register-ssh-host/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/014-register-ssh-host/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/014-register-ssh-host/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/015-registry-v2/checklists/requirements.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/015-registry-v2/contracts/mirror-payload-v2.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/015-registry-v2/contracts/registry-accessor-api.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/015-registry-v2/contracts/registry-file-v2.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/015-registry-v2/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/015-registry-v2/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/015-registry-v2/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/015-registry-v2/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/015-registry-v2/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/015-registry-v2/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/016-sync-reconcile/checklists/requirements.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/016-sync-reconcile/contracts/cli-sync.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/016-sync-reconcile/contracts/provider-probe.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/016-sync-reconcile/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/016-sync-reconcile/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/016-sync-reconcile/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/016-sync-reconcile/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/016-sync-reconcile/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/016-sync-reconcile/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/017-web-adopt-simplify/checklists/requirements.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/017-web-adopt-simplify/contracts/cli-web-push.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/017-web-adopt-simplify/contracts/cli-web-status.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/017-web-adopt-simplify/contracts/revocation.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/017-web-adopt-simplify/contracts/setup-status-marker.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/017-web-adopt-simplify/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/017-web-adopt-simplify/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/017-web-adopt-simplify/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/017-web-adopt-simplify/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/017-web-adopt-simplify/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/017-web-adopt-simplify/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/018-provider-abstraction/baseline-notes.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/018-provider-abstraction/checklists/requirements.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/018-provider-abstraction/contracts/cli-surface.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/018-provider-abstraction/contracts/errors.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/018-provider-abstraction/contracts/lifecycle-templates.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/018-provider-abstraction/contracts/provider-protocol.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/018-provider-abstraction/contracts/sync-merge.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/018-provider-abstraction/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/018-provider-abstraction/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/018-provider-abstraction/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/018-provider-abstraction/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/018-provider-abstraction/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/018-provider-abstraction/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/019-hygiene-deps-docs/checklists/requirements.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/019-hygiene-deps-docs/contracts/cli-surface-delta.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/019-hygiene-deps-docs/contracts/docs-structure-check.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/019-hygiene-deps-docs/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/019-hygiene-deps-docs/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/019-hygiene-deps-docs/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/019-hygiene-deps-docs/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/019-hygiene-deps-docs/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/019-hygiene-deps-docs/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/020-openapi-type-generation/checklists/requirements.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/020-openapi-type-generation/contracts/drift-checks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/020-openapi-type-generation/contracts/terminal-frames-v1.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/020-openapi-type-generation/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/020-openapi-type-generation/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/020-openapi-type-generation/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/020-openapi-type-generation/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/020-openapi-type-generation/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/020-openapi-type-generation/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/021-cli-plane-separation/contracts/cli-surface.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/021-cli-plane-separation/contracts/descriptor-schema.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/021-cli-plane-separation/data-model.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/021-cli-plane-separation/plan.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/021-cli-plane-separation/quickstart.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/021-cli-plane-separation/research.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/021-cli-plane-separation/spec.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/specs/021-cli-plane-separation/tasks.md +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/__main__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/cli/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/cli/added.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/cli/cp.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/cli/main.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/cli/providers/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/cli/providers/factory.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/cli/shell.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/cli/web.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/ansible_runner.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/completion.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/config.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/errors.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/known_hosts.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/lifecycle.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/output.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/picker.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/provider_protocol.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/provider_registry.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/reconcile.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/registry.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/remo_host_client.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/rsync.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/snapshot.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/ssh.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/validation.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/version.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/web_adopt.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/core/web_drift.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/models/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/models/capability.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/models/discovery.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/models/host.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/models/session_target.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/models/snapshot.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/providers/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/providers/added.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/providers/aws.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/providers/aws_descriptor.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/providers/builtin.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/providers/hetzner.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/providers/hetzner_descriptor.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/providers/incus.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/providers/incus_descriptor.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/providers/proxmox.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/providers/proxmox_descriptor.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/api/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/api/hosts.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/api/pairing.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/api/setup.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/api/terminals.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/app.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/check.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/config.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/discovery.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/frames.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/health.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/logging_config.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/models.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/operator_auth.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/pairing.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/ssh_master.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/state.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/terminal.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/terminal_registry.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/src/remo_cli/web/tokens.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/ansible/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/ansible/test_apt_sources_repair.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/ansible/test_authorized_keys_bootstrap.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/ansible/test_remo_host_idempotency.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/conftest.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/e2e/fixtures.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/e2e/keyboard-routing.spec.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/e2e/mobile.spec.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/e2e/reconnect.spec.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/e2e/terminal-shell-io.spec.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/e2e/terminal-tui-compatibility.spec.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/e2e/workspace-layout.spec.ts +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/image/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/image/test_docker_image.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/_nine_terminal_fixture.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/fish_completion.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/orbstack-cloud-init.yml +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/orbstack.sh +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/test_nine_terminals.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/test_nine_terminals_soak.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/test_registry_concurrency.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/test_remo_host_e2e.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/test_security_rejections.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/test_setup_payload_versions.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/test_sync_reconcile.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/test_terminal_attach.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/test_web_adopt_e2e.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/integration/test_web_cli_parity.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/perf/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/perf/test_latency.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/perf/test_registry_perf.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/providers/test_aws_snapshot.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/providers/test_hetzner_snapshot.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/providers/test_incus_snapshot.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/providers/test_incus_sync_all.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/providers/test_proxmox_snapshot.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/providers/test_proxmox_sync_all.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/surface_baseline.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/test_add_cmd.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/test_cli_uniformity.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/test_cp.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/test_main.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/test_remove_cmd.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/test_shell.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/test_shell_added.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/test_startup_imports.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/test_surface_preservation.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/cli/test_web_adopt_cmd.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_ansible_runner.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_completion.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_config.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_errors.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_known_hosts.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_lifecycle.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_migration_tagging_notice.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_output.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_picker.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_provider_registry.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_reconcile.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_registry_format.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_registry_locking.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_registry_migration.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_remo_host_client.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_rsync.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_snapshot.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_ssh.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_ssh_added.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_ssh_controlpath.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_ssh_identity_opts.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_validation.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_version.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_web_adopt_authorize.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_web_adopt_code.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_web_adopt_payload.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_web_adopt_trust.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_web_drift.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_web_push.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/core/test_web_push_self_heal.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/models/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/models/test_capability.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/models/test_discovery.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/models/test_session_target.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/fake_provider.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_added_add.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_added_provider_guard.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_added_update_remove.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_added_verify.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_aws_provider_protocol.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_aws_snapshot.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_aws_sync.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_aws_upgrade_resize.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_hetzner_entry_adapters.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_hetzner_http.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_hetzner_label.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_hetzner_resize.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_hetzner_snapshot.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_hetzner_sync.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_host_user_consistency.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_incus_entry_adapters.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_incus_marker.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_incus_resize.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_incus_snapshot.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_incus_sync.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_missing_sdk.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_provider_conformance.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_provider_registry_entries.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_proxmox_devcontainer_runtime.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_proxmox_marker.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_proxmox_provider_protocol.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_proxmox_resize.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_proxmox_snapshot.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/providers/test_proxmox_sync.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/test_ansible_templates.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/test_architecture.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/test_docs_structure.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/test_host_model.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/test_host_ssh_type.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/test_lockfile_version.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/test_schema_drift.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/__init__.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/_pairing_support.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/conftest.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/fixtures/hosts_response.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/fixtures/sessions_response.json +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_backpressure.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_check.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_csp.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_discovery.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_discovery_refresh_force.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_frames.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_health_states.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_hosts_mapping.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_lazy_import.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_log_redaction.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_mint_gating.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_operator_auth.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_pairing.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_pairing_origin.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_payload_equivalence.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_registry_readonly.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_setup_api.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_setup_auth.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_setup_dormancy.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_state.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_terminal_resize.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_terminals_api.py +0 -0
- {remo_cli-4.0.0 → remo_cli-4.0.1}/tests/unit/web/test_tokens.py +0 -0
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [4.0.1](https://github.com/get2knowio/remo/compare/v4.0.0...v4.0.1) (2026-08-03)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **web:** let the terminal-theme menu scroll instead of being clipped ([#134](https://github.com/get2knowio/remo/issues/134)) ([ffb34e7](https://github.com/get2knowio/remo/commit/ffb34e72cc9d1744130130934538d38af217ec73))
|
|
9
|
+
* **web:** make Remo Light's white family visible — `white` and `brightWhite` were 1.27:1 and 1.09:1 against the background, hiding dim and bold text ([#134](https://github.com/get2knowio/remo/issues/134)) ([c5bc07a](https://github.com/get2knowio/remo/commit/c5bc07a7))
|
|
10
|
+
|
|
3
11
|
## [4.0.0](https://github.com/get2knowio/remo/compare/v3.1.0...v4.0.0) (2026-08-03)
|
|
4
12
|
|
|
5
13
|
|
|
@@ -228,16 +228,23 @@
|
|
|
228
228
|
border-color: var(--accent-strong);
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
+
/* Positioned against the viewport from JS (themeMenuPosition) — `position`,
|
|
232
|
+
* `top`/`bottom`, `left` and `max-height` all arrive as inline styles. It has
|
|
233
|
+
* to escape `.terminal-card`'s `overflow: hidden`, which used to clip the list
|
|
234
|
+
* inside a short grid tile with no way to scroll to the rest. */
|
|
231
235
|
.tc-theme-menu {
|
|
232
|
-
position:
|
|
233
|
-
|
|
234
|
-
right: 0;
|
|
235
|
-
z-index: 20;
|
|
236
|
+
position: fixed;
|
|
237
|
+
z-index: 60;
|
|
236
238
|
min-width: 216px;
|
|
239
|
+
max-width: calc(100vw - 16px);
|
|
237
240
|
padding: 5px;
|
|
238
241
|
display: flex;
|
|
239
242
|
flex-direction: column;
|
|
240
243
|
gap: 2px;
|
|
244
|
+
overflow-y: auto;
|
|
245
|
+
/* Stop at the menu's own edges instead of scrolling the page behind it —
|
|
246
|
+
* the whole reported symptom was a swipe here moving the whole console. */
|
|
247
|
+
overscroll-behavior: contain;
|
|
241
248
|
background: var(--bg-elev);
|
|
242
249
|
border: 1px solid var(--border-strong);
|
|
243
250
|
border-radius: 10px;
|
|
@@ -7,6 +7,7 @@ import { act, render, screen } from "@testing-library/react";
|
|
|
7
7
|
import { DndContext } from "@dnd-kit/core";
|
|
8
8
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
9
9
|
import type { SessionTarget } from "../api/client";
|
|
10
|
+
import { themeMenuPosition } from "./TerminalCard";
|
|
10
11
|
import type { RendererAdapter } from "../terminal/RendererAdapter";
|
|
11
12
|
|
|
12
13
|
const adapters: RendererAdapter[] = [];
|
|
@@ -196,3 +197,59 @@ describe("TerminalCard terminal theme", () => {
|
|
|
196
197
|
expect(screen.queryByRole("menu")).not.toBeInTheDocument();
|
|
197
198
|
});
|
|
198
199
|
});
|
|
200
|
+
|
|
201
|
+
// The reported bug: in a 2x2 grid on a small display the theme list was cut off
|
|
202
|
+
// at the card's edge (`.terminal-card` sets `overflow: hidden`) and swiping it
|
|
203
|
+
// scrolled the whole page instead. The menu is now placed against the viewport
|
|
204
|
+
// with a computed max-height, which is what gives it something to scroll.
|
|
205
|
+
describe("themeMenuPosition", () => {
|
|
206
|
+
const VIEWPORT = { width: 1024, height: 768 };
|
|
207
|
+
|
|
208
|
+
it("opens below the swatch when there is room, right-aligned to it", () => {
|
|
209
|
+
const pos = themeMenuPosition({ top: 100, bottom: 126, right: 500 }, VIEWPORT);
|
|
210
|
+
expect(pos.placement).toBe("below");
|
|
211
|
+
expect(pos.style).toMatchObject({ position: "fixed", top: 132, left: 500 - 216 });
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
it("caps the height to the space available, so the list scrolls instead of overflowing", () => {
|
|
215
|
+
// Room below is 768 - 560 - 6 - 8 = 194: enough to stay below, but well
|
|
216
|
+
// short of the ~300px the nine-entry list wants. That gap is the scroll.
|
|
217
|
+
const pos = themeMenuPosition({ top: 534, bottom: 560, right: 500 }, VIEWPORT);
|
|
218
|
+
expect(pos.placement).toBe("below");
|
|
219
|
+
expect(pos.style.maxHeight).toBe(194);
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
it("floors the height so a cramped anchor still shows a usable list", () => {
|
|
223
|
+
// Below is only 154 here, and above (560) is roomier — so it flips, rather
|
|
224
|
+
// than rendering a sliver.
|
|
225
|
+
const pos = themeMenuPosition({ top: 574, bottom: 600, right: 500 }, VIEWPORT);
|
|
226
|
+
expect(pos.placement).toBe("above");
|
|
227
|
+
expect(pos.style.maxHeight).toBe(560);
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
it("flips above the swatch when below is too cramped and above is roomier", () => {
|
|
231
|
+
const pos = themeMenuPosition({ top: 700, bottom: 726, right: 500 }, VIEWPORT);
|
|
232
|
+
expect(pos.placement).toBe("above");
|
|
233
|
+
// Anchored by its bottom edge, so it grows upward without needing its height.
|
|
234
|
+
expect(pos.style.bottom).toBe(768 - 700 + 6);
|
|
235
|
+
expect(pos.style.top).toBeUndefined();
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
it("never places the menu off the right edge", () => {
|
|
239
|
+
const pos = themeMenuPosition({ top: 40, bottom: 66, right: 1020 }, VIEWPORT);
|
|
240
|
+
expect(pos.style.left).toBe(1024 - 216 - 8);
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
it("never places the menu off the left edge on a narrow screen", () => {
|
|
244
|
+
const pos = themeMenuPosition({ top: 40, bottom: 66, right: 120 }, { width: 380, height: 800 });
|
|
245
|
+
expect(pos.style.left).toBe(8);
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
// A card mid-teardown (or jsdom, which reports zeroes) must not produce a
|
|
249
|
+
// negative max-height and an unusable sliver of a menu.
|
|
250
|
+
it("stays usable for a degenerate anchor", () => {
|
|
251
|
+
const pos = themeMenuPosition({ top: 0, bottom: 0, right: 0 }, { width: 0, height: 0 });
|
|
252
|
+
expect(pos.style.maxHeight as number).toBeGreaterThan(0);
|
|
253
|
+
expect(pos.style.left as number).toBeGreaterThanOrEqual(0);
|
|
254
|
+
});
|
|
255
|
+
});
|
|
@@ -9,7 +9,14 @@
|
|
|
9
9
|
// single↔grid only re-renders the header chrome and never remounts the
|
|
10
10
|
// terminal surface (which would tear down the live connection).
|
|
11
11
|
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
useCallback,
|
|
14
|
+
useEffect,
|
|
15
|
+
useLayoutEffect,
|
|
16
|
+
useRef,
|
|
17
|
+
useState,
|
|
18
|
+
type CSSProperties,
|
|
19
|
+
} from "react";
|
|
13
20
|
import { useDraggable, useDroppable } from "@dnd-kit/core";
|
|
14
21
|
import type { SessionTarget, TypedError } from "../api/client";
|
|
15
22
|
import { providerMeta } from "./providerMeta";
|
|
@@ -84,6 +91,71 @@ interface TerminalCardProps {
|
|
|
84
91
|
onStarted?: () => void;
|
|
85
92
|
}
|
|
86
93
|
|
|
94
|
+
/** Where the terminal-theme popup goes, as viewport-relative inline styles. */
|
|
95
|
+
export interface ThemeMenuPosition {
|
|
96
|
+
style: CSSProperties;
|
|
97
|
+
/** Which side of the swatch the menu opened on (asserted in tests). */
|
|
98
|
+
placement: "below" | "above";
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** Gap between the swatch and the menu, and the minimum breathing room kept
|
|
102
|
+
* against the viewport edges. */
|
|
103
|
+
const THEME_MENU_GAP = 6;
|
|
104
|
+
const THEME_MENU_MARGIN = 8;
|
|
105
|
+
/** Matches the menu's min-width in TerminalCard.css. */
|
|
106
|
+
const THEME_MENU_WIDTH = 216;
|
|
107
|
+
/** Below this, "below the swatch" is too cramped to be worth using. */
|
|
108
|
+
const THEME_MENU_MIN_USABLE = 160;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Place the theme popup against the VIEWPORT rather than the card.
|
|
112
|
+
*
|
|
113
|
+
* A grid tile on a small screen (a 2x2 layout on an iPad, say) is routinely
|
|
114
|
+
* shorter than the nine-entry theme list, and `.terminal-card` sets
|
|
115
|
+
* `overflow: hidden` — so an absolutely-positioned menu was silently clipped at
|
|
116
|
+
* the card's edge with no way to reach the rest. Fixed positioning escapes that
|
|
117
|
+
* clip, and the computed `maxHeight` is what gives the menu something to scroll
|
|
118
|
+
* (paired with `overscroll-behavior: contain` in CSS, so the scroll stops at the
|
|
119
|
+
* menu instead of running the page).
|
|
120
|
+
*
|
|
121
|
+
* Opens downward by default, flipping above the swatch when there is more room
|
|
122
|
+
* there, and clamps horizontally so the menu can never sit off-screen.
|
|
123
|
+
*/
|
|
124
|
+
export function themeMenuPosition(
|
|
125
|
+
anchor: { top: number; bottom: number; right: number },
|
|
126
|
+
viewport: { width: number; height: number } = {
|
|
127
|
+
width: window.innerWidth,
|
|
128
|
+
height: window.innerHeight,
|
|
129
|
+
},
|
|
130
|
+
): ThemeMenuPosition {
|
|
131
|
+
const roomBelow = viewport.height - anchor.bottom - THEME_MENU_GAP - THEME_MENU_MARGIN;
|
|
132
|
+
const roomAbove = anchor.top - THEME_MENU_GAP - THEME_MENU_MARGIN;
|
|
133
|
+
const placement: "below" | "above" =
|
|
134
|
+
roomBelow < THEME_MENU_MIN_USABLE && roomAbove > roomBelow ? "above" : "below";
|
|
135
|
+
|
|
136
|
+
// Right-align to the swatch, then clamp both edges into the viewport.
|
|
137
|
+
const left = Math.max(
|
|
138
|
+
THEME_MENU_MARGIN,
|
|
139
|
+
Math.min(anchor.right - THEME_MENU_WIDTH, viewport.width - THEME_MENU_WIDTH - THEME_MENU_MARGIN),
|
|
140
|
+
);
|
|
141
|
+
// Never negative: a zero-height anchor (jsdom, or a card mid-teardown) would
|
|
142
|
+
// otherwise ask for a negative max-height and render an unusable sliver.
|
|
143
|
+
const maxHeight = Math.max(THEME_MENU_MIN_USABLE, placement === "above" ? roomAbove : roomBelow);
|
|
144
|
+
|
|
145
|
+
return {
|
|
146
|
+
placement,
|
|
147
|
+
style:
|
|
148
|
+
placement === "above"
|
|
149
|
+
? {
|
|
150
|
+
position: "fixed",
|
|
151
|
+
bottom: viewport.height - anchor.top + THEME_MENU_GAP,
|
|
152
|
+
left,
|
|
153
|
+
maxHeight,
|
|
154
|
+
}
|
|
155
|
+
: { position: "fixed", top: anchor.bottom + THEME_MENU_GAP, left, maxHeight },
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
87
159
|
function effectiveFont(settings: SettingsState, mode: TerminalCardMode): TerminalFontOptions {
|
|
88
160
|
const base = terminalFontOptions(settings);
|
|
89
161
|
if (mode === "grid" && settings.gridFit) {
|
|
@@ -142,6 +214,9 @@ export function TerminalCard({
|
|
|
142
214
|
const [copied, setCopied] = useState(false);
|
|
143
215
|
const [themeMenuOpen, setThemeMenuOpen] = useState(false);
|
|
144
216
|
const themeMenuRef = useRef<HTMLDivElement | null>(null);
|
|
217
|
+
const themeButtonRef = useRef<HTMLButtonElement | null>(null);
|
|
218
|
+
// Viewport-relative placement for the theme popup; null until measured.
|
|
219
|
+
const [themeMenuPos, setThemeMenuPos] = useState<ThemeMenuPosition | null>(null);
|
|
145
220
|
|
|
146
221
|
// dnd-kit reorder: the tile is both a draggable (handle = header grip, below)
|
|
147
222
|
// and a droppable (swap target). Disabled outside a reorderable grid. We use
|
|
@@ -336,6 +411,39 @@ export function TerminalCard({
|
|
|
336
411
|
}
|
|
337
412
|
}, [isFocused, isVisible]);
|
|
338
413
|
|
|
414
|
+
// Measure the popup's placement before paint, and keep it anchored while it
|
|
415
|
+
// is open. A grid tile can be far smaller than the list, so the menu is
|
|
416
|
+
// positioned against the VIEWPORT (see ThemeMenuPosition) rather than the
|
|
417
|
+
// card, which clips its overflow.
|
|
418
|
+
useLayoutEffect(() => {
|
|
419
|
+
if (!themeMenuOpen) {
|
|
420
|
+
setThemeMenuPos(null);
|
|
421
|
+
return undefined;
|
|
422
|
+
}
|
|
423
|
+
const measure = (): void => {
|
|
424
|
+
const button = themeButtonRef.current;
|
|
425
|
+
if (button) {
|
|
426
|
+
setThemeMenuPos(themeMenuPosition(button.getBoundingClientRect()));
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
measure();
|
|
430
|
+
// A rotate/resize moves the anchor; so does scrolling the pane under it.
|
|
431
|
+
// Scrolling INSIDE the menu must not re-anchor (it would fight the user),
|
|
432
|
+
// and element scrolls only reach window listeners in the capture phase.
|
|
433
|
+
const onScroll = (e: Event): void => {
|
|
434
|
+
if (themeMenuRef.current?.contains(e.target as Node)) {
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
measure();
|
|
438
|
+
};
|
|
439
|
+
window.addEventListener("resize", measure);
|
|
440
|
+
window.addEventListener("scroll", onScroll, true);
|
|
441
|
+
return () => {
|
|
442
|
+
window.removeEventListener("resize", measure);
|
|
443
|
+
window.removeEventListener("scroll", onScroll, true);
|
|
444
|
+
};
|
|
445
|
+
}, [themeMenuOpen]);
|
|
446
|
+
|
|
339
447
|
// Dismiss the theme popup on Escape or a click anywhere outside it.
|
|
340
448
|
useEffect(() => {
|
|
341
449
|
if (!themeMenuOpen) {
|
|
@@ -501,6 +609,7 @@ export function TerminalCard({
|
|
|
501
609
|
<div className="tc-theme" ref={themeMenuRef}>
|
|
502
610
|
<button
|
|
503
611
|
type="button"
|
|
612
|
+
ref={themeButtonRef}
|
|
504
613
|
className="tc-btn tc-btn--swatch"
|
|
505
614
|
data-testid={`terminal-theme-${target.id}`}
|
|
506
615
|
title={`Terminal theme: ${theme.label}${hasThemeOverride ? "" : " (default)"}`}
|
|
@@ -515,8 +624,8 @@ export function TerminalCard({
|
|
|
515
624
|
>
|
|
516
625
|
A
|
|
517
626
|
</button>
|
|
518
|
-
{themeMenuOpen && (
|
|
519
|
-
<div className="tc-theme-menu" role="menu">
|
|
627
|
+
{themeMenuOpen && themeMenuPos && (
|
|
628
|
+
<div className="tc-theme-menu" role="menu" style={themeMenuPos.style}>
|
|
520
629
|
<button
|
|
521
630
|
type="button"
|
|
522
631
|
className={`tc-theme-item${hasThemeOverride ? "" : " tc-theme-item--on"}`}
|
|
@@ -14,6 +14,19 @@ import {
|
|
|
14
14
|
|
|
15
15
|
const HEX = /^#[0-9a-fA-F]{6}$/;
|
|
16
16
|
|
|
17
|
+
/** WCAG relative luminance, then the standard contrast ratio. */
|
|
18
|
+
function luminance(hex: string): number {
|
|
19
|
+
const channels = [1, 3, 5]
|
|
20
|
+
.map((i) => parseInt(hex.slice(i, i + 2), 16) / 255)
|
|
21
|
+
.map((c) => (c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4)));
|
|
22
|
+
return 0.2126 * channels[0] + 0.7152 * channels[1] + 0.0722 * channels[2];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function contrast(a: string, b: string): number {
|
|
26
|
+
const [hi, lo] = [luminance(a), luminance(b)].sort((x, y) => y - x);
|
|
27
|
+
return (hi + 0.05) / (lo + 0.05);
|
|
28
|
+
}
|
|
29
|
+
|
|
17
30
|
// The 22 ITheme fields every palette must set. Listed literally rather than
|
|
18
31
|
// derived from a sample theme, so a field dropped from every palette at once
|
|
19
32
|
// still fails here.
|
|
@@ -63,6 +76,44 @@ describe("terminal themes", () => {
|
|
|
63
76
|
expect(autoTerminalTheme(false).variant).toBe("light");
|
|
64
77
|
});
|
|
65
78
|
|
|
79
|
+
// Every colour the Remo pair can PRINT must be legible on its own
|
|
80
|
+
// background. This is the regression guard for a real report: Remo Light
|
|
81
|
+
// shipped `white` at #d5d8db and `brightWhite` at #fbfcfd — 1.27:1 and
|
|
82
|
+
// 1.09:1 — so Claude Code's "Cooked for 9s" and "(shift+tab to cycle)" hints
|
|
83
|
+
// were invisible, and bold made it worse, since xterm draws bold with the
|
|
84
|
+
// BRIGHT colour.
|
|
85
|
+
//
|
|
86
|
+
// Scoped to the two themes we author: the third-party ports are faithful
|
|
87
|
+
// copies and several of them would fail this (Gruvbox Light sets colour 0 to
|
|
88
|
+
// its own background), which is theirs to define, not ours to "fix".
|
|
89
|
+
//
|
|
90
|
+
// `black` is exempt: sitting near the background is what colour 0 is FOR in a
|
|
91
|
+
// dark theme, and apps use it as a background fill far more than as text.
|
|
92
|
+
describe.each([
|
|
93
|
+
["remo-dark", "#040608"],
|
|
94
|
+
["remo-light", "#eff2f6"],
|
|
95
|
+
])("%s stays legible on its own background", (id, bg) => {
|
|
96
|
+
const theme = TERMINAL_THEMES.find((t) => t.id === id)!;
|
|
97
|
+
const printable = Object.entries(theme.colors).filter(
|
|
98
|
+
([slot]) =>
|
|
99
|
+
!["background", "cursorAccent", "selectionBackground", "selectionForeground", "black"].includes(
|
|
100
|
+
slot,
|
|
101
|
+
),
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
it.each(printable)("%s (%s) clears 3:1", (slot, hex) => {
|
|
105
|
+
expect(contrast(hex, bg), `${id}.${slot} ${hex} on ${bg}`).toBeGreaterThanOrEqual(3);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it("keeps bold white stronger than normal white, not weaker", () => {
|
|
109
|
+
// Bold is drawn with brightWhite; if it were the paler of the two, bold
|
|
110
|
+
// text would recede exactly where it should stand out.
|
|
111
|
+
expect(contrast(theme.colors.brightWhite, bg)).toBeGreaterThan(
|
|
112
|
+
contrast(theme.colors.white, bg),
|
|
113
|
+
);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
|
|
66
117
|
// The palette is a hand-derived snapshot of theme/tokens.css (it cannot
|
|
67
118
|
// reference the tokens live), so pin the anchors that make it "matching":
|
|
68
119
|
// the terminal background IS --bg-term, and the foreground IS --text.
|
|
@@ -127,6 +127,15 @@ export const TERMINAL_THEMES: TerminalTheme[] = [
|
|
|
127
127
|
variant: "light",
|
|
128
128
|
// On a light background the "bright" half goes DARKER, not lighter — the
|
|
129
129
|
// same inversion Solarized Light uses, so bold text stays legible.
|
|
130
|
+
//
|
|
131
|
+
// That inversion has to include the WHITE pair, which is the trap Solarized
|
|
132
|
+
// Light and Catppuccin Latte both fall into: a literal white `white` sits at
|
|
133
|
+
// ~1.1:1 on a light background and simply is not there. Terminal apps print
|
|
134
|
+
// colour 7/15 as TEXT constantly (Claude Code's "Cooked for 9s" and
|
|
135
|
+
// "(shift+tab to cycle)" hints among them), so here they are the two darkest
|
|
136
|
+
// neutrals — 6.3:1 and 13:1 — with brightWhite the stronger of the pair, so
|
|
137
|
+
// bold still reads as emphasis. Reported from a live session; the contrast
|
|
138
|
+
// floor is asserted in terminalThemes.test.ts.
|
|
130
139
|
colors: {
|
|
131
140
|
background: "#eff2f6",
|
|
132
141
|
foreground: "#242930",
|
|
@@ -141,7 +150,7 @@ export const TERMINAL_THEMES: TerminalTheme[] = [
|
|
|
141
150
|
blue: "#007bb2",
|
|
142
151
|
magenta: "#ad36a7",
|
|
143
152
|
cyan: "#008389",
|
|
144
|
-
white: "#
|
|
153
|
+
white: "#535960",
|
|
145
154
|
brightBlack: "#6c727a",
|
|
146
155
|
brightRed: "#a9000c",
|
|
147
156
|
brightGreen: "#007026",
|
|
@@ -149,7 +158,7 @@ export const TERMINAL_THEMES: TerminalTheme[] = [
|
|
|
149
158
|
brightBlue: "#0064a1",
|
|
150
159
|
brightMagenta: "#950891",
|
|
151
160
|
brightCyan: "#006b71",
|
|
152
|
-
brightWhite: "#
|
|
161
|
+
brightWhite: "#242930",
|
|
153
162
|
},
|
|
154
163
|
},
|
|
155
164
|
// --- Curated third-party schemes -----------------------------------------
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remo_cli-4.0.0 → remo_cli-4.0.1}/.maverick/checkpoints/feature/implementation_complete.json
RENAMED
|
File without changes
|
{remo_cli-4.0.0 → remo_cli-4.0.1}/.maverick/checkpoints/feature/phase_${{ index }}_complete.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/commands/speckit.git.initialize.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/scripts/bash/create-new-feature.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/scripts/powershell/auto-commit.ps1
RENAMED
|
File without changes
|
{remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/scripts/powershell/create-new-feature.ps1
RENAMED
|
File without changes
|
|
File without changes
|
{remo_cli-4.0.0 → remo_cli-4.0.1}/.specify/extensions/git/scripts/powershell/initialize-repo.ps1
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
|