remo-cli 3.0.0__tar.gz → 3.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (625) hide show
  1. remo_cli-3.1.0/.release-please-manifest.json +3 -0
  2. {remo_cli-3.0.0 → remo_cli-3.1.0}/CHANGELOG.md +7 -0
  3. {remo_cli-3.0.0 → remo_cli-3.1.0}/PKG-INFO +1 -1
  4. {remo_cli-3.0.0 → remo_cli-3.1.0}/pyproject.toml +1 -1
  5. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/cli/main.py +18 -2
  6. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/completion.py +61 -0
  7. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/test_main.py +11 -0
  8. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_completion.py +80 -0
  9. {remo_cli-3.0.0 → remo_cli-3.1.0}/uv.lock +1 -1
  10. remo_cli-3.0.0/.release-please-manifest.json +0 -3
  11. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/release/SKILL.md +0 -0
  12. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-analyze/SKILL.md +0 -0
  13. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-checklist/SKILL.md +0 -0
  14. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-clarify/SKILL.md +0 -0
  15. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-constitution/SKILL.md +0 -0
  16. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-converge/SKILL.md +0 -0
  17. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-git-commit/SKILL.md +0 -0
  18. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-git-feature/SKILL.md +0 -0
  19. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-git-initialize/SKILL.md +0 -0
  20. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-git-remote/SKILL.md +0 -0
  21. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-git-validate/SKILL.md +0 -0
  22. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-implement/SKILL.md +0 -0
  23. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-plan/SKILL.md +0 -0
  24. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-specify/SKILL.md +0 -0
  25. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-tasks/SKILL.md +0 -0
  26. {remo_cli-3.0.0 → remo_cli-3.1.0}/.claude/skills/speckit-taskstoissues/SKILL.md +0 -0
  27. {remo_cli-3.0.0 → remo_cli-3.1.0}/.devcontainer/devcontainer.json +0 -0
  28. {remo_cli-3.0.0 → remo_cli-3.1.0}/.dockerignore +0 -0
  29. {remo_cli-3.0.0 → remo_cli-3.1.0}/.github/CODEOWNERS +0 -0
  30. {remo_cli-3.0.0 → remo_cli-3.1.0}/.github/dependabot.yml +0 -0
  31. {remo_cli-3.0.0 → remo_cli-3.1.0}/.github/workflows/ci.yml +0 -0
  32. {remo_cli-3.0.0 → remo_cli-3.1.0}/.github/workflows/codeql.yml +0 -0
  33. {remo_cli-3.0.0 → remo_cli-3.1.0}/.github/workflows/dependency-review.yml +0 -0
  34. {remo_cli-3.0.0 → remo_cli-3.1.0}/.github/workflows/dev-build.yml +0 -0
  35. {remo_cli-3.0.0 → remo_cli-3.1.0}/.github/workflows/provision.yml +0 -0
  36. {remo_cli-3.0.0 → remo_cli-3.1.0}/.github/workflows/release-please.yml +0 -0
  37. {remo_cli-3.0.0 → remo_cli-3.1.0}/.github/workflows/release.yml +0 -0
  38. {remo_cli-3.0.0 → remo_cli-3.1.0}/.github/workflows/smoke-test-cleanup.yml +0 -0
  39. {remo_cli-3.0.0 → remo_cli-3.1.0}/.github/workflows/smoke-test.yml +0 -0
  40. {remo_cli-3.0.0 → remo_cli-3.1.0}/.github/workflows/teardown.yml +0 -0
  41. {remo_cli-3.0.0 → remo_cli-3.1.0}/.gitignore +0 -0
  42. {remo_cli-3.0.0 → remo_cli-3.1.0}/.maverick/checkpoints/feature/implementation_complete.json +0 -0
  43. {remo_cli-3.0.0 → remo_cli-3.1.0}/.maverick/checkpoints/feature/phase_${{ index }}_complete.json +0 -0
  44. {remo_cli-3.0.0 → remo_cli-3.1.0}/.maverick/checkpoints/feature/validation_complete.json +0 -0
  45. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/.registry +0 -0
  46. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/README.md +0 -0
  47. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/commands/speckit.git.commit.md +0 -0
  48. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/commands/speckit.git.feature.md +0 -0
  49. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/commands/speckit.git.initialize.md +0 -0
  50. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/commands/speckit.git.remote.md +0 -0
  51. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/commands/speckit.git.validate.md +0 -0
  52. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/config-template.yml +0 -0
  53. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/extension.yml +0 -0
  54. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/git-config.yml +0 -0
  55. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/scripts/bash/auto-commit.sh +0 -0
  56. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/scripts/bash/create-new-feature.sh +0 -0
  57. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/scripts/bash/git-common.sh +0 -0
  58. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/scripts/bash/initialize-repo.sh +0 -0
  59. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
  60. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/scripts/powershell/create-new-feature.ps1 +0 -0
  61. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/scripts/powershell/git-common.ps1 +0 -0
  62. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
  63. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/extensions.yml +0 -0
  64. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/feature.json +0 -0
  65. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/init-options.json +0 -0
  66. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/integration.json +0 -0
  67. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/integrations/claude.manifest.json +0 -0
  68. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/integrations/speckit.manifest.json +0 -0
  69. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/memory/constitution.md +0 -0
  70. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  71. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/scripts/bash/common.sh +0 -0
  72. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/scripts/bash/create-new-feature.sh +0 -0
  73. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/scripts/bash/setup-plan.sh +0 -0
  74. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/scripts/bash/setup-tasks.sh +0 -0
  75. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/scripts/bash/update-agent-context.sh +0 -0
  76. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/templates/agent-file-template.md +0 -0
  77. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/templates/checklist-template.md +0 -0
  78. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/templates/constitution-template.md +0 -0
  79. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/templates/plan-template.md +0 -0
  80. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/templates/spec-template.md +0 -0
  81. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/templates/tasks-template.md +0 -0
  82. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/workflows/speckit/workflow.yml +0 -0
  83. {remo_cli-3.0.0 → remo_cli-3.1.0}/.specify/workflows/workflow-registry.json +0 -0
  84. {remo_cli-3.0.0 → remo_cli-3.1.0}/AGENTS.md +0 -0
  85. {remo_cli-3.0.0 → remo_cli-3.1.0}/CLAUDE.md +0 -0
  86. {remo_cli-3.0.0 → remo_cli-3.1.0}/CONTRIBUTING.md +0 -0
  87. {remo_cli-3.0.0 → remo_cli-3.1.0}/Dockerfile +0 -0
  88. {remo_cli-3.0.0 → remo_cli-3.1.0}/LICENSE +0 -0
  89. {remo_cli-3.0.0 → remo_cli-3.1.0}/README.md +0 -0
  90. {remo_cli-3.0.0 → remo_cli-3.1.0}/SECURITY.md +0 -0
  91. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/.ansible-lint +0 -0
  92. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/README.md +0 -0
  93. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/ansible.cfg +0 -0
  94. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/aws_configure.yml +0 -0
  95. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/aws_resize.yml +0 -0
  96. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/aws_site.yml +0 -0
  97. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/aws_teardown.yml +0 -0
  98. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/group_vars/all.yml +0 -0
  99. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/group_vars/incus_containers.yml +0 -0
  100. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/group_vars/proxmox_containers.yml +0 -0
  101. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/hetzner_configure.yml +0 -0
  102. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/hetzner_provision.yml +0 -0
  103. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/hetzner_resize.yml +0 -0
  104. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/hetzner_site.yml +0 -0
  105. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/hetzner_teardown.yml +0 -0
  106. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/incus_bootstrap.yml +0 -0
  107. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/incus_configure.yml +0 -0
  108. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/incus_provision.yml +0 -0
  109. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/incus_resize.yml +0 -0
  110. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/incus_site.yml +0 -0
  111. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/incus_teardown.yml +0 -0
  112. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/inventory/hosts.yml +0 -0
  113. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/inventory/incus_containers.yml +0 -0
  114. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/proxmox_bootstrap.yml +0 -0
  115. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/proxmox_configure.yml +0 -0
  116. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/proxmox_provision.yml +0 -0
  117. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/proxmox_resize.yml +0 -0
  118. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/proxmox_site.yml +0 -0
  119. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/proxmox_teardown.yml +0 -0
  120. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/requirements.yml +0 -0
  121. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/aws_server/defaults/main.yml +0 -0
  122. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/aws_server/tasks/ebs.yml +0 -0
  123. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/aws_server/tasks/ec2.yml +0 -0
  124. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/aws_server/tasks/main.yml +0 -0
  125. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/aws_server/tasks/patch_manager.yml +0 -0
  126. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/aws_server/tasks/preflight.yml +0 -0
  127. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/aws_server/tasks/security_group.yml +0 -0
  128. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/deacon/defaults/main.yml +0 -0
  129. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/deacon/tasks/main.yml +0 -0
  130. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/devcontainers/tasks/main.yml +0 -0
  131. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/docker/handlers/main.yml +0 -0
  132. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/docker/tasks/main.yml +0 -0
  133. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/fzf/tasks/main.yml +0 -0
  134. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/github_cli/tasks/main.yml +0 -0
  135. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/hetzner_server/defaults/main.yml +0 -0
  136. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/hetzner_server/tasks/main.yml +0 -0
  137. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/incus_bootstrap/defaults/main.yml +0 -0
  138. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/incus_bootstrap/handlers/main.yml +0 -0
  139. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/incus_bootstrap/tasks/main.yml +0 -0
  140. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/incus_container/defaults/main.yml +0 -0
  141. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/incus_container/handlers/main.yml +0 -0
  142. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/incus_container/meta/main.yml +0 -0
  143. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/incus_container/tasks/main.yml +0 -0
  144. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/incus_container/tasks/preflight.yml +0 -0
  145. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/incus_container_teardown/defaults/main.yml +0 -0
  146. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/incus_container_teardown/meta/main.yml +0 -0
  147. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/incus_container_teardown/tasks/main.yml +0 -0
  148. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/nodejs/defaults/main.yml +0 -0
  149. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/nodejs/files/nodesource-repo.gpg.key +0 -0
  150. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/nodejs/tasks/main.yml +0 -0
  151. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/proxmox_bootstrap/defaults/main.yml +0 -0
  152. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/proxmox_bootstrap/meta/main.yml +0 -0
  153. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/proxmox_bootstrap/tasks/main.yml +0 -0
  154. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/proxmox_container/defaults/main.yml +0 -0
  155. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/proxmox_container/handlers/main.yml +0 -0
  156. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/proxmox_container/meta/main.yml +0 -0
  157. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/proxmox_container/tasks/main.yml +0 -0
  158. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/proxmox_container/tasks/preflight.yml +0 -0
  159. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/proxmox_container_teardown/defaults/main.yml +0 -0
  160. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/proxmox_container_teardown/meta/main.yml +0 -0
  161. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/proxmox_container_teardown/tasks/main.yml +0 -0
  162. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/user_setup/defaults/main.yml +0 -0
  163. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/user_setup/tasks/main.yml +0 -0
  164. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/user_setup/templates/devshell.sh.j2 +0 -0
  165. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/user_setup/templates/project-launch.sh.j2 +0 -0
  166. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/user_setup/templates/project-menu.sh.j2 +0 -0
  167. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/user_setup/templates/remo-host.sh.j2 +0 -0
  168. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/zellij/defaults/main.yml +0 -0
  169. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/zellij/tasks/main.yml +0 -0
  170. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/zellij/templates/config.kdl.j2 +0 -0
  171. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/roles/zellij/templates/layouts/minimal.kdl.j2 +0 -0
  172. {remo_cli-3.0.0 → remo_cli-3.1.0}/ansible/tasks/configure_dev_tools.yml +0 -0
  173. {remo_cli-3.0.0 → remo_cli-3.1.0}/docker/Dockerfile +0 -0
  174. {remo_cli-3.0.0 → remo_cli-3.1.0}/docker/compose.example.yml +0 -0
  175. {remo_cli-3.0.0 → remo_cli-3.1.0}/docker/entrypoint.sh +0 -0
  176. {remo_cli-3.0.0 → remo_cli-3.1.0}/docs/aws.md +0 -0
  177. {remo_cli-3.0.0 → remo_cli-3.1.0}/docs/feature-history.md +0 -0
  178. {remo_cli-3.0.0 → remo_cli-3.1.0}/docs/hetzner.md +0 -0
  179. {remo_cli-3.0.0 → remo_cli-3.1.0}/docs/incus.md +0 -0
  180. {remo_cli-3.0.0 → remo_cli-3.1.0}/docs/install.sh +0 -0
  181. {remo_cli-3.0.0 → remo_cli-3.1.0}/docs/maintaining-claude-md.md +0 -0
  182. {remo_cli-3.0.0 → remo_cli-3.1.0}/docs/maintaining-generated-types.md +0 -0
  183. {remo_cli-3.0.0 → remo_cli-3.1.0}/docs/providers.md +0 -0
  184. {remo_cli-3.0.0 → remo_cli-3.1.0}/docs/proxmox.md +0 -0
  185. {remo_cli-3.0.0 → remo_cli-3.1.0}/docs/remo-web-speckit-input.md +0 -0
  186. {remo_cli-3.0.0 → remo_cli-3.1.0}/docs/remo-web.html +0 -0
  187. {remo_cli-3.0.0 → remo_cli-3.1.0}/docs/web-session-interface.md +0 -0
  188. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/index.html +0 -0
  189. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/package-lock.json +0 -0
  190. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/package.json +0 -0
  191. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/public/README.md +0 -0
  192. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/public/dist__ghostty-vt.wasm +0 -0
  193. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/public/ghostty-vt.wasm +0 -0
  194. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/scripts/check-types-fresh.mjs +0 -0
  195. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/scripts/copy-ghostty-wasm.mjs +0 -0
  196. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/scripts/generate-frame-types.mjs +0 -0
  197. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/scripts/generate-schema-types.mjs +0 -0
  198. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/api/client.ts +0 -0
  199. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/api/generated/README.md +0 -0
  200. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/api/generated/openapi.json +0 -0
  201. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/api/generated/schema.d.ts +0 -0
  202. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/api/generated/terminal-frames.d.ts +0 -0
  203. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/api/generated/terminal-frames.json +0 -0
  204. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/api/generated.test.ts +0 -0
  205. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/AppRoot.tsx +0 -0
  206. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/AppShell.css +0 -0
  207. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/AppShell.tsx +0 -0
  208. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/AwaitingAdoption.css +0 -0
  209. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/AwaitingAdoption.tsx +0 -0
  210. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/OfflineOverlay.css +0 -0
  211. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/OfflineOverlay.tsx +0 -0
  212. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/PairToSync.css +0 -0
  213. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/PairToSync.tsx +0 -0
  214. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/SessionRail.css +0 -0
  215. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/SessionRail.tsx +0 -0
  216. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/SettingsPage.css +0 -0
  217. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/SettingsPage.tsx +0 -0
  218. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/ShortcutsModal.css +0 -0
  219. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/ShortcutsModal.tsx +0 -0
  220. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/TerminalCard.css +0 -0
  221. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/TerminalCard.tsx +0 -0
  222. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/TopBar.css +0 -0
  223. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/TopBar.tsx +0 -0
  224. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/WorkspacePane.css +0 -0
  225. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/WorkspacePane.tsx +0 -0
  226. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/providerMeta.test.ts +0 -0
  227. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/providerMeta.ts +0 -0
  228. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/components/railModel.ts +0 -0
  229. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/lib/clipboard.ts +0 -0
  230. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/lib/fullscreen.ts +0 -0
  231. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/main.tsx +0 -0
  232. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/state/discovery.ts +0 -0
  233. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/state/fonts.ts +0 -0
  234. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/state/health.ts +0 -0
  235. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/state/latency.test.ts +0 -0
  236. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/state/latency.ts +0 -0
  237. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/state/settings.ts +0 -0
  238. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/state/useConsoleKeyboard.ts +0 -0
  239. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/state/workspace.test.ts +0 -0
  240. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/state/workspace.ts +0 -0
  241. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/terminal/.gitkeep +0 -0
  242. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/terminal/GhosttyRenderer.ts +0 -0
  243. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/terminal/RendererAdapter.ts +0 -0
  244. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/terminal/TerminalConnection.test.ts +0 -0
  245. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/terminal/TerminalConnection.ts +0 -0
  246. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/terminal/XtermRenderer.ts +0 -0
  247. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/terminal/defaultRenderer.ts +0 -0
  248. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/terminal/keymap.test.ts +0 -0
  249. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/terminal/keymap.ts +0 -0
  250. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/test/setup.ts +0 -0
  251. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/theme/fonts.ts +0 -0
  252. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/src/theme/tokens.css +0 -0
  253. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/tsconfig.json +0 -0
  254. {remo_cli-3.0.0 → remo_cli-3.1.0}/frontend/vite.config.ts +0 -0
  255. {remo_cli-3.0.0 → remo_cli-3.1.0}/install.sh +0 -0
  256. {remo_cli-3.0.0 → remo_cli-3.1.0}/maverick.yaml +0 -0
  257. {remo_cli-3.0.0 → remo_cli-3.1.0}/playwright.config.ts +0 -0
  258. {remo_cli-3.0.0 → remo_cli-3.1.0}/project-menu.sh +0 -0
  259. {remo_cli-3.0.0 → remo_cli-3.1.0}/release-please-config.json +0 -0
  260. {remo_cli-3.0.0 → remo_cli-3.1.0}/remo +0 -0
  261. {remo_cli-3.0.0 → remo_cli-3.1.0}/remo.svg +0 -0
  262. {remo_cli-3.0.0 → remo_cli-3.1.0}/run.sh +0 -0
  263. {remo_cli-3.0.0 → remo_cli-3.1.0}/scripts/export_openapi.py +0 -0
  264. {remo_cli-3.0.0 → remo_cli-3.1.0}/scripts/setup-aws-oidc.sh +0 -0
  265. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/001-bootstrap-incus-host/checklists/requirements.md +0 -0
  266. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/001-bootstrap-incus-host/checklists/validation.md +0 -0
  267. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/001-bootstrap-incus-host/contracts/playbook-interface.yaml +0 -0
  268. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/001-bootstrap-incus-host/contracts/role-interface.yaml +0 -0
  269. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/001-bootstrap-incus-host/data-model.md +0 -0
  270. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/001-bootstrap-incus-host/plan.md +0 -0
  271. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/001-bootstrap-incus-host/quickstart.md +0 -0
  272. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/001-bootstrap-incus-host/research.md +0 -0
  273. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/001-bootstrap-incus-host/spec.md +0 -0
  274. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/001-bootstrap-incus-host/tasks.md +0 -0
  275. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/002-incus-container-support/checklists/requirements.md +0 -0
  276. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/002-incus-container-support/contracts/playbook-interface.yaml +0 -0
  277. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/002-incus-container-support/contracts/role-interface.yaml +0 -0
  278. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/002-incus-container-support/data-model.md +0 -0
  279. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/002-incus-container-support/plan.md +0 -0
  280. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/002-incus-container-support/quickstart.md +0 -0
  281. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/002-incus-container-support/research.md +0 -0
  282. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/002-incus-container-support/spec.md +0 -0
  283. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/002-incus-container-support/tasks.md +0 -0
  284. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/003-python-cli-rewrite/checklists/requirements.md +0 -0
  285. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/003-python-cli-rewrite/data-model.md +0 -0
  286. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/003-python-cli-rewrite/plan.md +0 -0
  287. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/003-python-cli-rewrite/quickstart.md +0 -0
  288. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/003-python-cli-rewrite/research.md +0 -0
  289. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/003-python-cli-rewrite/spec.md +0 -0
  290. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/003-python-cli-rewrite/tasks.md +0 -0
  291. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/004-proxmox-container-support/spec.md +0 -0
  292. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/005-provider-snapshots/checklists/requirements.md +0 -0
  293. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/005-provider-snapshots/contracts/cli-surface.md +0 -0
  294. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/005-provider-snapshots/data-model.md +0 -0
  295. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/005-provider-snapshots/plan.md +0 -0
  296. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/005-provider-snapshots/quickstart.md +0 -0
  297. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/005-provider-snapshots/research.md +0 -0
  298. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/005-provider-snapshots/spec.md +0 -0
  299. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/005-provider-snapshots/tasks.md +0 -0
  300. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/010-web-session-interface/checklists/requirements.md +0 -0
  301. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/010-web-session-interface/contracts/remo-host-protocol.md +0 -0
  302. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/010-web-session-interface/contracts/rest-api.md +0 -0
  303. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/010-web-session-interface/contracts/terminal-websocket.md +0 -0
  304. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/010-web-session-interface/data-model.md +0 -0
  305. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/010-web-session-interface/plan.md +0 -0
  306. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/010-web-session-interface/quickstart.md +0 -0
  307. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/010-web-session-interface/research.md +0 -0
  308. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/010-web-session-interface/spec.md +0 -0
  309. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/010-web-session-interface/tasks.md +0 -0
  310. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/011-web-adopt/checklists/requirements.md +0 -0
  311. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/011-web-adopt/contracts/cli-web-adopt.md +0 -0
  312. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/011-web-adopt/contracts/setup-api.md +0 -0
  313. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/011-web-adopt/data-model.md +0 -0
  314. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/011-web-adopt/plan.md +0 -0
  315. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/011-web-adopt/quickstart-results.md +0 -0
  316. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/011-web-adopt/quickstart.md +0 -0
  317. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/011-web-adopt/research.md +0 -0
  318. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/011-web-adopt/spec.md +0 -0
  319. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/011-web-adopt/tasks.md +0 -0
  320. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/012-web-adopt-pairing/contracts/cli-web-adopt.md +0 -0
  321. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/012-web-adopt-pairing/contracts/pairing-api.md +0 -0
  322. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/012-web-adopt-pairing/contracts/setup-api.md +0 -0
  323. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/012-web-adopt-pairing/data-model.md +0 -0
  324. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/012-web-adopt-pairing/plan.md +0 -0
  325. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/012-web-adopt-pairing/quickstart.md +0 -0
  326. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/012-web-adopt-pairing/research.md +0 -0
  327. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/012-web-adopt-pairing/spec.md +0 -0
  328. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/012-web-adopt-pairing/tasks.md +0 -0
  329. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/013-managed-instance-tags/contracts/cli-sync.md +0 -0
  330. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/013-managed-instance-tags/contracts/marker-commands.md +0 -0
  331. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/013-managed-instance-tags/data-model.md +0 -0
  332. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/013-managed-instance-tags/plan.md +0 -0
  333. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/013-managed-instance-tags/quickstart.md +0 -0
  334. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/013-managed-instance-tags/research.md +0 -0
  335. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/013-managed-instance-tags/spec.md +0 -0
  336. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/013-managed-instance-tags/tasks.md +0 -0
  337. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/014-register-ssh-host/contracts/add-command.md +0 -0
  338. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/014-register-ssh-host/contracts/remove-command.md +0 -0
  339. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/014-register-ssh-host/data-model.md +0 -0
  340. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/014-register-ssh-host/plan.md +0 -0
  341. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/014-register-ssh-host/quickstart.md +0 -0
  342. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/014-register-ssh-host/research.md +0 -0
  343. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/014-register-ssh-host/spec.md +0 -0
  344. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/014-register-ssh-host/tasks.md +0 -0
  345. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/015-registry-v2/checklists/requirements.md +0 -0
  346. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/015-registry-v2/contracts/mirror-payload-v2.md +0 -0
  347. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/015-registry-v2/contracts/registry-accessor-api.md +0 -0
  348. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/015-registry-v2/contracts/registry-file-v2.md +0 -0
  349. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/015-registry-v2/data-model.md +0 -0
  350. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/015-registry-v2/plan.md +0 -0
  351. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/015-registry-v2/quickstart.md +0 -0
  352. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/015-registry-v2/research.md +0 -0
  353. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/015-registry-v2/spec.md +0 -0
  354. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/015-registry-v2/tasks.md +0 -0
  355. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/016-sync-reconcile/checklists/requirements.md +0 -0
  356. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/016-sync-reconcile/contracts/cli-sync.md +0 -0
  357. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/016-sync-reconcile/contracts/provider-probe.md +0 -0
  358. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/016-sync-reconcile/data-model.md +0 -0
  359. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/016-sync-reconcile/plan.md +0 -0
  360. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/016-sync-reconcile/quickstart.md +0 -0
  361. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/016-sync-reconcile/research.md +0 -0
  362. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/016-sync-reconcile/spec.md +0 -0
  363. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/016-sync-reconcile/tasks.md +0 -0
  364. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/017-web-adopt-simplify/checklists/requirements.md +0 -0
  365. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/017-web-adopt-simplify/contracts/cli-web-push.md +0 -0
  366. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/017-web-adopt-simplify/contracts/cli-web-status.md +0 -0
  367. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/017-web-adopt-simplify/contracts/revocation.md +0 -0
  368. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/017-web-adopt-simplify/contracts/setup-status-marker.md +0 -0
  369. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/017-web-adopt-simplify/data-model.md +0 -0
  370. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/017-web-adopt-simplify/plan.md +0 -0
  371. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/017-web-adopt-simplify/quickstart.md +0 -0
  372. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/017-web-adopt-simplify/research.md +0 -0
  373. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/017-web-adopt-simplify/spec.md +0 -0
  374. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/017-web-adopt-simplify/tasks.md +0 -0
  375. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/018-provider-abstraction/baseline-notes.md +0 -0
  376. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/018-provider-abstraction/checklists/requirements.md +0 -0
  377. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/018-provider-abstraction/contracts/cli-surface.md +0 -0
  378. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/018-provider-abstraction/contracts/errors.md +0 -0
  379. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/018-provider-abstraction/contracts/lifecycle-templates.md +0 -0
  380. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/018-provider-abstraction/contracts/provider-protocol.md +0 -0
  381. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/018-provider-abstraction/contracts/sync-merge.md +0 -0
  382. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/018-provider-abstraction/data-model.md +0 -0
  383. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/018-provider-abstraction/plan.md +0 -0
  384. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/018-provider-abstraction/quickstart.md +0 -0
  385. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/018-provider-abstraction/research.md +0 -0
  386. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/018-provider-abstraction/spec.md +0 -0
  387. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/018-provider-abstraction/tasks.md +0 -0
  388. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/019-hygiene-deps-docs/checklists/requirements.md +0 -0
  389. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/019-hygiene-deps-docs/contracts/cli-surface-delta.md +0 -0
  390. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/019-hygiene-deps-docs/contracts/docs-structure-check.md +0 -0
  391. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/019-hygiene-deps-docs/data-model.md +0 -0
  392. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/019-hygiene-deps-docs/plan.md +0 -0
  393. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/019-hygiene-deps-docs/quickstart.md +0 -0
  394. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/019-hygiene-deps-docs/research.md +0 -0
  395. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/019-hygiene-deps-docs/spec.md +0 -0
  396. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/019-hygiene-deps-docs/tasks.md +0 -0
  397. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/020-openapi-type-generation/checklists/requirements.md +0 -0
  398. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/020-openapi-type-generation/contracts/drift-checks.md +0 -0
  399. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/020-openapi-type-generation/contracts/terminal-frames-v1.md +0 -0
  400. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/020-openapi-type-generation/data-model.md +0 -0
  401. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/020-openapi-type-generation/plan.md +0 -0
  402. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/020-openapi-type-generation/quickstart.md +0 -0
  403. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/020-openapi-type-generation/research.md +0 -0
  404. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/020-openapi-type-generation/spec.md +0 -0
  405. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/020-openapi-type-generation/tasks.md +0 -0
  406. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/021-cli-plane-separation/contracts/cli-surface.md +0 -0
  407. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/021-cli-plane-separation/contracts/descriptor-schema.md +0 -0
  408. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/021-cli-plane-separation/data-model.md +0 -0
  409. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/021-cli-plane-separation/plan.md +0 -0
  410. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/021-cli-plane-separation/quickstart.md +0 -0
  411. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/021-cli-plane-separation/research.md +0 -0
  412. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/021-cli-plane-separation/spec.md +0 -0
  413. {remo_cli-3.0.0 → remo_cli-3.1.0}/specs/021-cli-plane-separation/tasks.md +0 -0
  414. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/__init__.py +0 -0
  415. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/__main__.py +0 -0
  416. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/cli/__init__.py +0 -0
  417. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/cli/added.py +0 -0
  418. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/cli/cp.py +0 -0
  419. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/cli/providers/__init__.py +0 -0
  420. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/cli/providers/factory.py +0 -0
  421. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/cli/shell.py +0 -0
  422. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/cli/web.py +0 -0
  423. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/__init__.py +0 -0
  424. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/ansible_runner.py +0 -0
  425. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/config.py +0 -0
  426. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/errors.py +0 -0
  427. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/known_hosts.py +0 -0
  428. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/lifecycle.py +0 -0
  429. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/output.py +0 -0
  430. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/picker.py +0 -0
  431. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/provider_protocol.py +0 -0
  432. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/provider_registry.py +0 -0
  433. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/reconcile.py +0 -0
  434. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/registry.py +0 -0
  435. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/remo_host_client.py +0 -0
  436. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/rsync.py +0 -0
  437. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/snapshot.py +0 -0
  438. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/ssh.py +0 -0
  439. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/validation.py +0 -0
  440. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/version.py +0 -0
  441. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/web_adopt.py +0 -0
  442. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/core/web_drift.py +0 -0
  443. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/models/__init__.py +0 -0
  444. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/models/capability.py +0 -0
  445. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/models/discovery.py +0 -0
  446. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/models/host.py +0 -0
  447. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/models/session_target.py +0 -0
  448. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/models/snapshot.py +0 -0
  449. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/providers/__init__.py +0 -0
  450. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/providers/added.py +0 -0
  451. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/providers/aws.py +0 -0
  452. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/providers/aws_descriptor.py +0 -0
  453. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/providers/builtin.py +0 -0
  454. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/providers/hetzner.py +0 -0
  455. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/providers/hetzner_descriptor.py +0 -0
  456. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/providers/incus.py +0 -0
  457. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/providers/incus_descriptor.py +0 -0
  458. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/providers/proxmox.py +0 -0
  459. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/providers/proxmox_descriptor.py +0 -0
  460. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/__init__.py +0 -0
  461. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/api/__init__.py +0 -0
  462. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/api/hosts.py +0 -0
  463. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/api/pairing.py +0 -0
  464. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/api/setup.py +0 -0
  465. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/api/terminals.py +0 -0
  466. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/app.py +0 -0
  467. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/check.py +0 -0
  468. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/config.py +0 -0
  469. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/discovery.py +0 -0
  470. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/frames.py +0 -0
  471. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/health.py +0 -0
  472. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/logging_config.py +0 -0
  473. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/models.py +0 -0
  474. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/operator_auth.py +0 -0
  475. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/pairing.py +0 -0
  476. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/ssh_master.py +0 -0
  477. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/state.py +0 -0
  478. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/terminal.py +0 -0
  479. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/terminal_registry.py +0 -0
  480. {remo_cli-3.0.0 → remo_cli-3.1.0}/src/remo_cli/web/tokens.py +0 -0
  481. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/__init__.py +0 -0
  482. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/ansible/__init__.py +0 -0
  483. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/ansible/test_remo_host_idempotency.py +0 -0
  484. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/conftest.py +0 -0
  485. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/e2e/fixtures.ts +0 -0
  486. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/e2e/ghostty-shell-io.spec.ts +0 -0
  487. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/e2e/ghostty-tui-compatibility.spec.ts +0 -0
  488. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/e2e/keyboard-routing.spec.ts +0 -0
  489. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/e2e/mobile.spec.ts +0 -0
  490. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/e2e/reconnect.spec.ts +0 -0
  491. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/e2e/workspace-layout.spec.ts +0 -0
  492. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/image/__init__.py +0 -0
  493. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/image/test_docker_image.py +0 -0
  494. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/__init__.py +0 -0
  495. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/_nine_terminal_fixture.py +0 -0
  496. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/fish_completion.sh +0 -0
  497. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/orbstack-cloud-init.yml +0 -0
  498. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/orbstack.sh +0 -0
  499. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/test_nine_terminals.py +0 -0
  500. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/test_nine_terminals_soak.py +0 -0
  501. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/test_registry_concurrency.py +0 -0
  502. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/test_remo_host_e2e.py +0 -0
  503. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/test_security_rejections.py +0 -0
  504. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/test_setup_payload_versions.py +0 -0
  505. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/test_sync_reconcile.py +0 -0
  506. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/test_terminal_attach.py +0 -0
  507. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/test_web_adopt_e2e.py +0 -0
  508. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/integration/test_web_cli_parity.py +0 -0
  509. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/perf/__init__.py +0 -0
  510. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/perf/test_latency.py +0 -0
  511. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/perf/test_registry_perf.py +0 -0
  512. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/__init__.py +0 -0
  513. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/__init__.py +0 -0
  514. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/providers/test_aws_snapshot.py +0 -0
  515. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/providers/test_hetzner_snapshot.py +0 -0
  516. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/providers/test_incus_snapshot.py +0 -0
  517. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/providers/test_incus_sync_all.py +0 -0
  518. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/providers/test_proxmox_snapshot.py +0 -0
  519. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/providers/test_proxmox_sync_all.py +0 -0
  520. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/surface_baseline.py +0 -0
  521. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/test_add_cmd.py +0 -0
  522. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/test_cli_uniformity.py +0 -0
  523. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/test_cp.py +0 -0
  524. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/test_remove_cmd.py +0 -0
  525. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/test_shell.py +0 -0
  526. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/test_shell_added.py +0 -0
  527. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/test_startup_imports.py +0 -0
  528. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/test_surface_preservation.py +0 -0
  529. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/cli/test_web_adopt_cmd.py +0 -0
  530. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/__init__.py +0 -0
  531. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_ansible_runner.py +0 -0
  532. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_config.py +0 -0
  533. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_errors.py +0 -0
  534. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_known_hosts.py +0 -0
  535. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_lifecycle.py +0 -0
  536. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_migration_tagging_notice.py +0 -0
  537. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_output.py +0 -0
  538. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_picker.py +0 -0
  539. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_provider_registry.py +0 -0
  540. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_reconcile.py +0 -0
  541. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_registry_format.py +0 -0
  542. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_registry_locking.py +0 -0
  543. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_registry_migration.py +0 -0
  544. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_remo_host_client.py +0 -0
  545. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_rsync.py +0 -0
  546. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_snapshot.py +0 -0
  547. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_ssh.py +0 -0
  548. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_ssh_added.py +0 -0
  549. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_ssh_controlpath.py +0 -0
  550. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_ssh_identity_opts.py +0 -0
  551. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_validation.py +0 -0
  552. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_version.py +0 -0
  553. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_web_adopt_authorize.py +0 -0
  554. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_web_adopt_code.py +0 -0
  555. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_web_adopt_payload.py +0 -0
  556. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_web_adopt_trust.py +0 -0
  557. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_web_drift.py +0 -0
  558. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/core/test_web_push.py +0 -0
  559. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/models/__init__.py +0 -0
  560. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/models/test_capability.py +0 -0
  561. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/models/test_discovery.py +0 -0
  562. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/models/test_session_target.py +0 -0
  563. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/__init__.py +0 -0
  564. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/fake_provider.py +0 -0
  565. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_added_add.py +0 -0
  566. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_added_provider_guard.py +0 -0
  567. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_added_update_remove.py +0 -0
  568. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_added_verify.py +0 -0
  569. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_aws_provider_protocol.py +0 -0
  570. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_aws_snapshot.py +0 -0
  571. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_aws_sync.py +0 -0
  572. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_aws_upgrade_resize.py +0 -0
  573. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_hetzner_entry_adapters.py +0 -0
  574. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_hetzner_http.py +0 -0
  575. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_hetzner_label.py +0 -0
  576. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_hetzner_resize.py +0 -0
  577. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_hetzner_snapshot.py +0 -0
  578. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_hetzner_sync.py +0 -0
  579. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_incus_entry_adapters.py +0 -0
  580. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_incus_marker.py +0 -0
  581. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_incus_resize.py +0 -0
  582. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_incus_snapshot.py +0 -0
  583. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_incus_sync.py +0 -0
  584. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_missing_sdk.py +0 -0
  585. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_provider_conformance.py +0 -0
  586. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_provider_registry_entries.py +0 -0
  587. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_proxmox_devcontainer_runtime.py +0 -0
  588. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_proxmox_marker.py +0 -0
  589. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_proxmox_provider_protocol.py +0 -0
  590. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_proxmox_resize.py +0 -0
  591. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_proxmox_snapshot.py +0 -0
  592. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/providers/test_proxmox_sync.py +0 -0
  593. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/test_ansible_templates.py +0 -0
  594. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/test_architecture.py +0 -0
  595. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/test_docs_structure.py +0 -0
  596. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/test_host_model.py +0 -0
  597. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/test_host_ssh_type.py +0 -0
  598. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/test_schema_drift.py +0 -0
  599. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/__init__.py +0 -0
  600. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/_pairing_support.py +0 -0
  601. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/conftest.py +0 -0
  602. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/fixtures/hosts_response.json +0 -0
  603. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/fixtures/sessions_response.json +0 -0
  604. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_backpressure.py +0 -0
  605. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_check.py +0 -0
  606. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_csp.py +0 -0
  607. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_discovery.py +0 -0
  608. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_frames.py +0 -0
  609. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_health_states.py +0 -0
  610. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_hosts_mapping.py +0 -0
  611. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_lazy_import.py +0 -0
  612. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_log_redaction.py +0 -0
  613. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_mint_gating.py +0 -0
  614. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_operator_auth.py +0 -0
  615. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_pairing.py +0 -0
  616. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_pairing_origin.py +0 -0
  617. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_payload_equivalence.py +0 -0
  618. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_registry_readonly.py +0 -0
  619. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_setup_api.py +0 -0
  620. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_setup_auth.py +0 -0
  621. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_setup_dormancy.py +0 -0
  622. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_state.py +0 -0
  623. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_terminal_resize.py +0 -0
  624. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_terminals_api.py +0 -0
  625. {remo_cli-3.0.0 → remo_cli-3.1.0}/tests/unit/web/test_tokens.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "3.1.0"
3
+ }
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.1.0](https://github.com/get2knowio/remo/compare/v3.0.0...v3.1.0) (2026-07-29)
4
+
5
+
6
+ ### Features
7
+
8
+ * **cli:** warn when fish won't autoload the completion we just wrote ([#118](https://github.com/get2knowio/remo/issues/118)) ([759780d](https://github.com/get2knowio/remo/commit/759780d1eab3b39409cd315e22bd16ad0ab126ab))
9
+
3
10
  ## [3.0.0](https://github.com/get2knowio/remo/compare/v2.2.0...v3.0.0) (2026-07-28)
4
11
 
5
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remo-cli
3
- Version: 3.0.0
3
+ Version: 3.1.0
4
4
  Summary: Remote development environment CLI
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "remo-cli"
7
- version = "3.0.0"
7
+ version = "3.1.0"
8
8
  description = "Remote development environment CLI"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -192,7 +192,13 @@ def completion_show(shell: str) -> None:
192
192
  help="Add the rc `source` line without prompting (bash and zsh only).",
193
193
  )
194
194
  def completion_install(shell: str | None, yes: bool) -> None:
195
- """Install tab completion for SHELL (detected from $SHELL if omitted).
195
+ """Install tab completion for SHELL (auto-detected if omitted).
196
+
197
+ Detection prefers the shell you are actually running, read from the process
198
+ tree, and falls back to $SHELL. The two disagree more often than you would
199
+ expect — macOS ships zsh as the login shell, so $SHELL says zsh even when
200
+ you launch fish from your terminal emulator. When they differ remo says so
201
+ and uses the shell you are typing into; naming one explicitly always wins.
196
202
 
197
203
  Writes the activation script to its own file and, for bash and zsh, adds a
198
204
  single line to your rc file that loads it. Safe to re-run: an unchanged
@@ -202,7 +208,11 @@ def completion_install(shell: str | None, yes: bool) -> None:
202
208
  fish needs no rc change — its completions directory is loaded
203
209
  automatically.
204
210
  """
205
- from remo_cli.core.completion import detect_shell, install
211
+ from remo_cli.core.completion import (
212
+ detect_shell,
213
+ fish_autoload_problem,
214
+ install,
215
+ )
206
216
  from remo_cli.core.output import print_info, print_success, print_warning
207
217
 
208
218
  if shell is None:
@@ -231,6 +241,12 @@ def completion_install(shell: str | None, yes: bool) -> None:
231
241
  print_info(f"Completion script already current: {outcome.script_path}")
232
242
 
233
243
  if outcome.rc_path is None:
244
+ # fish needs no rc edit, but "wrote the file" is not the same as "fish
245
+ # will read it" — and when it won't, the failure is completely silent.
246
+ problem = fish_autoload_problem(outcome.script_path)
247
+ if problem:
248
+ print_warning(problem)
249
+ return
234
250
  print_info("Start a new shell (or run `exec fish`) to pick it up.")
235
251
  return
236
252
 
@@ -191,6 +191,67 @@ def stale_shells(current_version: str, *, home: Path | None = None) -> list[str]
191
191
  return [s for s in SHELLS if is_stale(s, current_version, home=home)]
192
192
 
193
193
 
194
+ def fish_autoload_problem(script_path: Path) -> str | None:
195
+ """Warn when fish will not autoload the script we just wrote.
196
+
197
+ A correct script in a directory fish does not read fails *identically* to a
198
+ broken script: fish silently completes filenames instead. There is no error,
199
+ and `remo completion install` otherwise reports success — so the user is
200
+ told everything worked while nothing does. Issue #116 was exactly this, and
201
+ took a day to find precisely because the failure is mute.
202
+
203
+ Asks fish what it actually reads rather than reasoning about it, so this
204
+ catches any cause — an exported `fish_complete_path`, a config that
205
+ overwrites it, a path we got wrong — not just the one that prompted it.
206
+
207
+ Returns None when everything is fine, or when fish is absent (nothing to
208
+ verify against, and installing for a shell you don't have is legitimate).
209
+ """
210
+ try:
211
+ proc = subprocess.run(
212
+ ["fish", "-c", r"printf '%s\n' $fish_complete_path"],
213
+ capture_output=True,
214
+ text=True,
215
+ timeout=5,
216
+ )
217
+ except (OSError, subprocess.SubprocessError):
218
+ return None
219
+ if proc.returncode != 0:
220
+ return None
221
+
222
+ entries = [line.strip() for line in proc.stdout.splitlines() if line.strip()]
223
+ if not entries or str(script_path.parent) in entries:
224
+ return None
225
+
226
+ # The specific cause behind #116, worth naming because the remedy is a
227
+ # one-character edit that is otherwise very hard to arrive at: fish
228
+ # colon-joins an exported list variable only when its name ends in
229
+ # uppercase PATH. `fish_complete_path` is lowercase, so an exported copy is
230
+ # space-joined and every child fish re-imports it as ONE nonexistent
231
+ # directory — silently losing every user completion at once.
232
+ exported = os.environ.get("fish_complete_path")
233
+ if exported and " " in exported:
234
+ return (
235
+ f"fish will not load completions from {script_path.parent}.\n"
236
+ " `fish_complete_path` is exported in your environment as a single "
237
+ "space-joined\n"
238
+ " string, so every child fish sees one nonexistent directory "
239
+ "instead of a list.\n"
240
+ " Fix: in your fish config use `set -g fish_complete_path ...`, "
241
+ "not `set -gx`.\n"
242
+ " The script itself is fine — completion will simply do nothing "
243
+ "until that changes."
244
+ )
245
+
246
+ return (
247
+ f"fish will not load completions from {script_path.parent} — "
248
+ "it is not in $fish_complete_path.\n"
249
+ " The script itself is fine, but completion will silently do nothing.\n"
250
+ " Check your fish config for anything that overwrites "
251
+ "`fish_complete_path`."
252
+ )
253
+
254
+
194
255
  def installed_version(shell: str, *, home: Path | None = None) -> str | None:
195
256
  """Return the remo version stamped into the installed script, if any.
196
257
 
@@ -264,6 +264,17 @@ class TestCompletionCommand:
264
264
  assert f"generated by remo {remo_cli.__version__}" in result.output
265
265
  assert f"remo completion install {shell}" in result.output
266
266
 
267
+ def test_install_help_does_not_claim_shell_env_detection(self):
268
+ """#115 changed detection to prefer the process tree, but the help text
269
+ kept saying "detected from $SHELL" — and shipped that way in 3.0.0.
270
+ The docstring restates behavior defined elsewhere, so nothing but a
271
+ test keeps the two in step (Principle VIII).
272
+ """
273
+ result = _invoke("completion", "install", "--help")
274
+ assert result.exit_code == 0
275
+ assert "detected from $SHELL" not in result.output
276
+ assert "process" in result.output
277
+
267
278
  @pytest.mark.parametrize("shell", ["bash", "zsh", "fish"])
268
279
  def test_bare_shell_form_still_routes_to_show(self, shell):
269
280
  """`remo completion <shell>` predates the group split and is what every
@@ -8,6 +8,7 @@ on never touching an rc file without consent.
8
8
  from __future__ import annotations
9
9
 
10
10
  import os
11
+ import subprocess
11
12
 
12
13
  import pytest
13
14
 
@@ -15,6 +16,7 @@ from remo_cli.core import completion
15
16
  from remo_cli.core.completion import (
16
17
  SHELLS,
17
18
  detect_shell,
19
+ fish_autoload_problem,
18
20
  install,
19
21
  installed_version,
20
22
  is_stale,
@@ -261,6 +263,84 @@ class TestInstall:
261
263
  # ---------------------------------------------------------------------------
262
264
 
263
265
 
266
+ class TestFishAutoloadProblem:
267
+ """Guards issue #116: a correct script fish never reads fails identically
268
+ to a broken one — silent fallback to filename completion, with `install`
269
+ reporting success. The whole point of this check is that the failure is
270
+ otherwise mute.
271
+ """
272
+
273
+ @staticmethod
274
+ def _fish_returns(monkeypatch, stdout, returncode=0):
275
+ def fake_run(cmd, **kwargs):
276
+ return subprocess.CompletedProcess(cmd, returncode, stdout, "")
277
+
278
+ monkeypatch.setattr(subprocess, "run", fake_run)
279
+
280
+ def test_silent_when_directory_is_on_the_path(self, monkeypatch, tmp_path):
281
+ script = tmp_path / "completions" / "remo.fish"
282
+ self._fish_returns(monkeypatch, f"/other\n{script.parent}\n/more\n")
283
+ assert fish_autoload_problem(script) is None
284
+
285
+ def test_names_the_export_collapse_when_that_is_the_cause(
286
+ self, monkeypatch, tmp_path
287
+ ):
288
+ """fish colon-joins an exported list var only when the name ends in
289
+ uppercase PATH. `fish_complete_path` is lowercase, so an exported copy
290
+ is space-joined and every child fish re-imports it as ONE nonexistent
291
+ directory. The remedy is a one-character edit that is very hard to
292
+ arrive at unaided, so it is worth naming explicitly."""
293
+ script = tmp_path / "completions" / "remo.fish"
294
+ self._fish_returns(monkeypatch, "/collapsed /into /one\n")
295
+ monkeypatch.setenv("fish_complete_path", "/collapsed /into /one")
296
+ msg = fish_autoload_problem(script)
297
+ assert msg is not None
298
+ assert "set -g fish_complete_path" in msg
299
+ assert "not `set -gx`" in msg
300
+ # Must not leave the user thinking they need to reinstall.
301
+ assert "script itself is fine" in msg
302
+
303
+ def test_generic_message_when_not_an_export_problem(self, monkeypatch, tmp_path):
304
+ script = tmp_path / "completions" / "remo.fish"
305
+ self._fish_returns(monkeypatch, "/somewhere/else\n")
306
+ monkeypatch.delenv("fish_complete_path", raising=False)
307
+ msg = fish_autoload_problem(script)
308
+ assert msg is not None
309
+ assert "not in $fish_complete_path" in msg
310
+ assert "set -gx" not in msg
311
+
312
+ def test_single_exported_entry_is_not_flagged_as_collapsed(
313
+ self, monkeypatch, tmp_path
314
+ ):
315
+ """An exported path with one entry round-trips correctly — it is only
316
+ the space-joining of two or more that produces a bogus element."""
317
+ script = tmp_path / "completions" / "remo.fish"
318
+ self._fish_returns(monkeypatch, "/elsewhere\n")
319
+ monkeypatch.setenv("fish_complete_path", "/elsewhere")
320
+ msg = fish_autoload_problem(script)
321
+ assert msg is not None
322
+ assert "set -gx" not in msg
323
+
324
+ def test_missing_fish_is_not_a_problem(self, monkeypatch, tmp_path):
325
+ """Installing completion for a shell you do not have is legitimate;
326
+ there is simply nothing to verify against."""
327
+
328
+ def boom(cmd, **kwargs):
329
+ raise FileNotFoundError("fish")
330
+
331
+ monkeypatch.setattr(subprocess, "run", boom)
332
+ assert fish_autoload_problem(tmp_path / "completions" / "remo.fish") is None
333
+
334
+ def test_fish_error_is_not_a_problem(self, monkeypatch, tmp_path):
335
+ self._fish_returns(monkeypatch, "", returncode=127)
336
+ assert fish_autoload_problem(tmp_path / "completions" / "remo.fish") is None
337
+
338
+ def test_empty_output_is_not_a_problem(self, monkeypatch, tmp_path):
339
+ """Don't turn an unreadable answer into a confident accusation."""
340
+ self._fish_returns(monkeypatch, "\n")
341
+ assert fish_autoload_problem(tmp_path / "completions" / "remo.fish") is None
342
+
343
+
264
344
  class TestStaleness:
265
345
  def test_reads_the_stamped_version(self, home):
266
346
  install("bash", SCRIPT, edit_rc=False, home=home)
@@ -1038,7 +1038,7 @@ wheels = [
1038
1038
 
1039
1039
  [[package]]
1040
1040
  name = "remo-cli"
1041
- version = "2.2.0"
1041
+ version = "3.0.0"
1042
1042
  source = { editable = "." }
1043
1043
  dependencies = [
1044
1044
  { name = "ansible-core" },
@@ -1,3 +0,0 @@
1
- {
2
- ".": "3.0.0"
3
- }
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