remo-cli 2.2.0rc7__tar.gz → 2.2.0rc9__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 (441) hide show
  1. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.github/workflows/ci.yml +31 -0
  2. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/CLAUDE.md +2 -0
  3. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/PKG-INFO +1 -1
  4. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/docs/web-session-interface.md +10 -7
  5. remo_cli-2.2.0rc9/frontend/package-lock.json +3891 -0
  6. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/package.json +10 -1
  7. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/SessionRail.css +0 -8
  8. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/SessionRail.tsx +0 -4
  9. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/TerminalCard.css +27 -6
  10. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/TerminalCard.tsx +68 -39
  11. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/WorkspacePane.tsx +60 -25
  12. remo_cli-2.2.0rc9/frontend/src/state/workspace.test.ts +98 -0
  13. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/state/workspace.ts +16 -0
  14. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/terminal/GhosttyRenderer.ts +5 -5
  15. remo_cli-2.2.0rc9/frontend/src/terminal/TerminalConnection.test.ts +147 -0
  16. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/terminal/XtermRenderer.ts +10 -8
  17. remo_cli-2.2.0rc9/frontend/src/terminal/keymap.test.ts +32 -0
  18. remo_cli-2.2.0rc9/frontend/src/terminal/keymap.ts +27 -0
  19. remo_cli-2.2.0rc9/frontend/src/test/setup.ts +10 -0
  20. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/vite.config.ts +14 -1
  21. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/pyproject.toml +1 -1
  22. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/e2e/fixtures.ts +4 -0
  23. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/e2e/workspace-layout.spec.ts +4 -3
  24. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/uv.lock +1 -1
  25. remo_cli-2.2.0rc7/frontend/package-lock.json +0 -1968
  26. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-analyze/SKILL.md +0 -0
  27. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-checklist/SKILL.md +0 -0
  28. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-clarify/SKILL.md +0 -0
  29. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-constitution/SKILL.md +0 -0
  30. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-converge/SKILL.md +0 -0
  31. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-git-commit/SKILL.md +0 -0
  32. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-git-feature/SKILL.md +0 -0
  33. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-git-initialize/SKILL.md +0 -0
  34. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-git-remote/SKILL.md +0 -0
  35. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-git-validate/SKILL.md +0 -0
  36. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-implement/SKILL.md +0 -0
  37. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-plan/SKILL.md +0 -0
  38. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-specify/SKILL.md +0 -0
  39. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-tasks/SKILL.md +0 -0
  40. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.claude/skills/speckit-taskstoissues/SKILL.md +0 -0
  41. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.devcontainer/devcontainer.json +0 -0
  42. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.dockerignore +0 -0
  43. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.github/dependabot.yml +0 -0
  44. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.github/workflows/provision.yml +0 -0
  45. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.github/workflows/release.yml +0 -0
  46. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.github/workflows/smoke-test-cleanup.yml +0 -0
  47. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.github/workflows/smoke-test.yml +0 -0
  48. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.github/workflows/teardown.yml +0 -0
  49. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.gitignore +0 -0
  50. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.maverick/checkpoints/feature/implementation_complete.json +0 -0
  51. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.maverick/checkpoints/feature/phase_${{ index }}_complete.json +0 -0
  52. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.maverick/checkpoints/feature/validation_complete.json +0 -0
  53. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/.registry +0 -0
  54. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/README.md +0 -0
  55. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/commands/speckit.git.commit.md +0 -0
  56. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/commands/speckit.git.feature.md +0 -0
  57. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/commands/speckit.git.initialize.md +0 -0
  58. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/commands/speckit.git.remote.md +0 -0
  59. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/commands/speckit.git.validate.md +0 -0
  60. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/config-template.yml +0 -0
  61. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/extension.yml +0 -0
  62. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/git-config.yml +0 -0
  63. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/scripts/bash/auto-commit.sh +0 -0
  64. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/scripts/bash/create-new-feature.sh +0 -0
  65. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/scripts/bash/git-common.sh +0 -0
  66. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/scripts/bash/initialize-repo.sh +0 -0
  67. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
  68. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/scripts/powershell/create-new-feature.ps1 +0 -0
  69. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/scripts/powershell/git-common.ps1 +0 -0
  70. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
  71. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/extensions.yml +0 -0
  72. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/feature.json +0 -0
  73. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/init-options.json +0 -0
  74. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/integration.json +0 -0
  75. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/integrations/claude.manifest.json +0 -0
  76. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/integrations/speckit.manifest.json +0 -0
  77. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/memory/constitution.md +0 -0
  78. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  79. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/scripts/bash/common.sh +0 -0
  80. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/scripts/bash/create-new-feature.sh +0 -0
  81. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/scripts/bash/setup-plan.sh +0 -0
  82. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/scripts/bash/setup-tasks.sh +0 -0
  83. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/scripts/bash/update-agent-context.sh +0 -0
  84. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/templates/agent-file-template.md +0 -0
  85. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/templates/checklist-template.md +0 -0
  86. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/templates/constitution-template.md +0 -0
  87. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/templates/plan-template.md +0 -0
  88. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/templates/spec-template.md +0 -0
  89. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/templates/tasks-template.md +0 -0
  90. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/workflows/speckit/workflow.yml +0 -0
  91. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/.specify/workflows/workflow-registry.json +0 -0
  92. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/AGENTS.md +0 -0
  93. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/CONTRIBUTING.md +0 -0
  94. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/Dockerfile +0 -0
  95. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/LICENSE +0 -0
  96. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/README.md +0 -0
  97. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/.ansible-lint +0 -0
  98. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/README.md +0 -0
  99. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/ansible.cfg +0 -0
  100. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/aws_configure.yml +0 -0
  101. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/aws_resize.yml +0 -0
  102. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/aws_site.yml +0 -0
  103. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/aws_teardown.yml +0 -0
  104. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/group_vars/all.yml +0 -0
  105. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/group_vars/incus_containers.yml +0 -0
  106. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/group_vars/proxmox_containers.yml +0 -0
  107. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/hetzner_configure.yml +0 -0
  108. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/hetzner_provision.yml +0 -0
  109. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/hetzner_resize.yml +0 -0
  110. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/hetzner_site.yml +0 -0
  111. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/hetzner_teardown.yml +0 -0
  112. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/incus_bootstrap.yml +0 -0
  113. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/incus_configure.yml +0 -0
  114. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/incus_provision.yml +0 -0
  115. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/incus_resize.yml +0 -0
  116. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/incus_site.yml +0 -0
  117. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/incus_teardown.yml +0 -0
  118. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/inventory/hosts.yml +0 -0
  119. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/inventory/incus_containers.yml +0 -0
  120. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/proxmox_bootstrap.yml +0 -0
  121. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/proxmox_configure.yml +0 -0
  122. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/proxmox_provision.yml +0 -0
  123. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/proxmox_resize.yml +0 -0
  124. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/proxmox_site.yml +0 -0
  125. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/proxmox_teardown.yml +0 -0
  126. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/requirements.yml +0 -0
  127. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/aws_server/defaults/main.yml +0 -0
  128. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/aws_server/tasks/ebs.yml +0 -0
  129. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/aws_server/tasks/ec2.yml +0 -0
  130. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/aws_server/tasks/main.yml +0 -0
  131. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/aws_server/tasks/patch_manager.yml +0 -0
  132. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/aws_server/tasks/preflight.yml +0 -0
  133. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/aws_server/tasks/security_group.yml +0 -0
  134. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/deacon/defaults/main.yml +0 -0
  135. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/deacon/tasks/main.yml +0 -0
  136. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/devcontainers/tasks/main.yml +0 -0
  137. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/docker/handlers/main.yml +0 -0
  138. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/docker/tasks/main.yml +0 -0
  139. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/fzf/tasks/main.yml +0 -0
  140. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/github_cli/tasks/main.yml +0 -0
  141. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/hetzner_server/defaults/main.yml +0 -0
  142. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/hetzner_server/tasks/main.yml +0 -0
  143. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/incus_bootstrap/defaults/main.yml +0 -0
  144. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/incus_bootstrap/handlers/main.yml +0 -0
  145. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/incus_bootstrap/tasks/main.yml +0 -0
  146. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/incus_container/defaults/main.yml +0 -0
  147. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/incus_container/handlers/main.yml +0 -0
  148. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/incus_container/meta/main.yml +0 -0
  149. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/incus_container/tasks/main.yml +0 -0
  150. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/incus_container/tasks/preflight.yml +0 -0
  151. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/incus_container_teardown/defaults/main.yml +0 -0
  152. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/incus_container_teardown/meta/main.yml +0 -0
  153. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/incus_container_teardown/tasks/main.yml +0 -0
  154. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/nodejs/defaults/main.yml +0 -0
  155. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/nodejs/tasks/main.yml +0 -0
  156. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/proxmox_bootstrap/defaults/main.yml +0 -0
  157. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/proxmox_bootstrap/meta/main.yml +0 -0
  158. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/proxmox_bootstrap/tasks/main.yml +0 -0
  159. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/proxmox_container/defaults/main.yml +0 -0
  160. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/proxmox_container/handlers/main.yml +0 -0
  161. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/proxmox_container/meta/main.yml +0 -0
  162. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/proxmox_container/tasks/main.yml +0 -0
  163. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/proxmox_container/tasks/preflight.yml +0 -0
  164. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/proxmox_container_teardown/defaults/main.yml +0 -0
  165. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/proxmox_container_teardown/meta/main.yml +0 -0
  166. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/proxmox_container_teardown/tasks/main.yml +0 -0
  167. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/user_setup/defaults/main.yml +0 -0
  168. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/user_setup/tasks/main.yml +0 -0
  169. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/user_setup/templates/devshell.sh.j2 +0 -0
  170. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/user_setup/templates/project-launch.sh.j2 +0 -0
  171. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/user_setup/templates/project-menu.sh.j2 +0 -0
  172. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/user_setup/templates/remo-host.sh.j2 +0 -0
  173. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/zellij/defaults/main.yml +0 -0
  174. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/zellij/tasks/main.yml +0 -0
  175. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/zellij/templates/config.kdl.j2 +0 -0
  176. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/roles/zellij/templates/layouts/minimal.kdl.j2 +0 -0
  177. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/ansible/tasks/configure_dev_tools.yml +0 -0
  178. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/docker/Dockerfile +0 -0
  179. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/docker/compose.example.yml +0 -0
  180. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/docker/entrypoint.sh +0 -0
  181. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/docs/aws.md +0 -0
  182. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/docs/hetzner.md +0 -0
  183. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/docs/incus.md +0 -0
  184. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/docs/install.sh +0 -0
  185. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/docs/proxmox.md +0 -0
  186. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/docs/remo-web-speckit-input.md +0 -0
  187. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/docs/remo-web.html +0 -0
  188. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/index.html +0 -0
  189. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/public/README.md +0 -0
  190. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/public/dist__ghostty-vt.wasm +0 -0
  191. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/public/ghostty-vt.wasm +0 -0
  192. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/scripts/copy-ghostty-wasm.mjs +0 -0
  193. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/api/client.ts +0 -0
  194. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/AppRoot.tsx +0 -0
  195. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/AppShell.css +0 -0
  196. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/AppShell.tsx +0 -0
  197. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/AwaitingAdoption.css +0 -0
  198. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/AwaitingAdoption.tsx +0 -0
  199. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/OfflineOverlay.css +0 -0
  200. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/OfflineOverlay.tsx +0 -0
  201. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/PairToSync.css +0 -0
  202. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/PairToSync.tsx +0 -0
  203. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/SettingsPage.css +0 -0
  204. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/SettingsPage.tsx +0 -0
  205. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/ShortcutsModal.css +0 -0
  206. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/ShortcutsModal.tsx +0 -0
  207. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/TopBar.css +0 -0
  208. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/TopBar.tsx +0 -0
  209. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/WorkspacePane.css +0 -0
  210. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/providerMeta.ts +0 -0
  211. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/components/railModel.ts +0 -0
  212. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/lib/clipboard.ts +0 -0
  213. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/lib/fullscreen.ts +0 -0
  214. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/main.tsx +0 -0
  215. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/state/discovery.ts +0 -0
  216. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/state/fonts.ts +0 -0
  217. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/state/health.ts +0 -0
  218. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/state/settings.ts +0 -0
  219. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/state/useConsoleKeyboard.ts +0 -0
  220. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/terminal/.gitkeep +0 -0
  221. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/terminal/RendererAdapter.ts +0 -0
  222. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/terminal/TerminalConnection.ts +0 -0
  223. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/terminal/defaultRenderer.ts +0 -0
  224. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/theme/fonts.ts +0 -0
  225. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/src/theme/tokens.css +0 -0
  226. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/frontend/tsconfig.json +0 -0
  227. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/install.sh +0 -0
  228. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/maverick.yaml +0 -0
  229. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/playwright.config.ts +0 -0
  230. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/project-menu.sh +0 -0
  231. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/remo +0 -0
  232. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/run.sh +0 -0
  233. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/scripts/setup-aws-oidc.sh +0 -0
  234. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/001-bootstrap-incus-host/checklists/requirements.md +0 -0
  235. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/001-bootstrap-incus-host/checklists/validation.md +0 -0
  236. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/001-bootstrap-incus-host/contracts/playbook-interface.yaml +0 -0
  237. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/001-bootstrap-incus-host/contracts/role-interface.yaml +0 -0
  238. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/001-bootstrap-incus-host/data-model.md +0 -0
  239. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/001-bootstrap-incus-host/plan.md +0 -0
  240. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/001-bootstrap-incus-host/quickstart.md +0 -0
  241. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/001-bootstrap-incus-host/research.md +0 -0
  242. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/001-bootstrap-incus-host/spec.md +0 -0
  243. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/001-bootstrap-incus-host/tasks.md +0 -0
  244. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/002-incus-container-support/checklists/requirements.md +0 -0
  245. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/002-incus-container-support/contracts/playbook-interface.yaml +0 -0
  246. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/002-incus-container-support/contracts/role-interface.yaml +0 -0
  247. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/002-incus-container-support/data-model.md +0 -0
  248. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/002-incus-container-support/plan.md +0 -0
  249. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/002-incus-container-support/quickstart.md +0 -0
  250. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/002-incus-container-support/research.md +0 -0
  251. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/002-incus-container-support/spec.md +0 -0
  252. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/002-incus-container-support/tasks.md +0 -0
  253. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/003-python-cli-rewrite/checklists/requirements.md +0 -0
  254. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/003-python-cli-rewrite/data-model.md +0 -0
  255. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/003-python-cli-rewrite/plan.md +0 -0
  256. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/003-python-cli-rewrite/quickstart.md +0 -0
  257. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/003-python-cli-rewrite/research.md +0 -0
  258. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/003-python-cli-rewrite/spec.md +0 -0
  259. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/003-python-cli-rewrite/tasks.md +0 -0
  260. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/004-proxmox-container-support/spec.md +0 -0
  261. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/005-provider-snapshots/checklists/requirements.md +0 -0
  262. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/005-provider-snapshots/contracts/cli-surface.md +0 -0
  263. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/005-provider-snapshots/data-model.md +0 -0
  264. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/005-provider-snapshots/plan.md +0 -0
  265. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/005-provider-snapshots/quickstart.md +0 -0
  266. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/005-provider-snapshots/research.md +0 -0
  267. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/005-provider-snapshots/spec.md +0 -0
  268. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/005-provider-snapshots/tasks.md +0 -0
  269. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/010-web-session-interface/checklists/requirements.md +0 -0
  270. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/010-web-session-interface/contracts/remo-host-protocol.md +0 -0
  271. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/010-web-session-interface/contracts/rest-api.md +0 -0
  272. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/010-web-session-interface/contracts/terminal-websocket.md +0 -0
  273. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/010-web-session-interface/data-model.md +0 -0
  274. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/010-web-session-interface/plan.md +0 -0
  275. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/010-web-session-interface/quickstart.md +0 -0
  276. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/010-web-session-interface/research.md +0 -0
  277. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/010-web-session-interface/spec.md +0 -0
  278. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/010-web-session-interface/tasks.md +0 -0
  279. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/011-web-adopt/checklists/requirements.md +0 -0
  280. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/011-web-adopt/contracts/cli-web-adopt.md +0 -0
  281. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/011-web-adopt/contracts/setup-api.md +0 -0
  282. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/011-web-adopt/data-model.md +0 -0
  283. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/011-web-adopt/plan.md +0 -0
  284. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/011-web-adopt/quickstart-results.md +0 -0
  285. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/011-web-adopt/quickstart.md +0 -0
  286. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/011-web-adopt/research.md +0 -0
  287. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/011-web-adopt/spec.md +0 -0
  288. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/011-web-adopt/tasks.md +0 -0
  289. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/012-web-adopt-pairing/contracts/cli-web-adopt.md +0 -0
  290. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/012-web-adopt-pairing/contracts/pairing-api.md +0 -0
  291. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/012-web-adopt-pairing/contracts/setup-api.md +0 -0
  292. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/012-web-adopt-pairing/data-model.md +0 -0
  293. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/012-web-adopt-pairing/plan.md +0 -0
  294. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/012-web-adopt-pairing/quickstart.md +0 -0
  295. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/012-web-adopt-pairing/research.md +0 -0
  296. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/012-web-adopt-pairing/spec.md +0 -0
  297. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/specs/012-web-adopt-pairing/tasks.md +0 -0
  298. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/__init__.py +0 -0
  299. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/__main__.py +0 -0
  300. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/cli/__init__.py +0 -0
  301. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/cli/cp.py +0 -0
  302. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/cli/main.py +0 -0
  303. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/cli/providers/__init__.py +0 -0
  304. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/cli/providers/aws.py +0 -0
  305. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/cli/providers/hetzner.py +0 -0
  306. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/cli/providers/incus.py +0 -0
  307. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/cli/providers/proxmox.py +0 -0
  308. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/cli/shell.py +0 -0
  309. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/cli/web.py +0 -0
  310. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/__init__.py +0 -0
  311. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/ansible_runner.py +0 -0
  312. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/completion.py +0 -0
  313. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/config.py +0 -0
  314. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/known_hosts.py +0 -0
  315. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/output.py +0 -0
  316. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/picker.py +0 -0
  317. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/remo_host_client.py +0 -0
  318. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/rsync.py +0 -0
  319. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/snapshot.py +0 -0
  320. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/ssh.py +0 -0
  321. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/validation.py +0 -0
  322. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/version.py +0 -0
  323. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/core/web_adopt.py +0 -0
  324. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/models/__init__.py +0 -0
  325. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/models/capability.py +0 -0
  326. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/models/discovery.py +0 -0
  327. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/models/host.py +0 -0
  328. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/models/session_target.py +0 -0
  329. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/models/snapshot.py +0 -0
  330. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/providers/__init__.py +0 -0
  331. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/providers/aws.py +0 -0
  332. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/providers/hetzner.py +0 -0
  333. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/providers/incus.py +0 -0
  334. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/providers/proxmox.py +0 -0
  335. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/__init__.py +0 -0
  336. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/api/__init__.py +0 -0
  337. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/api/hosts.py +0 -0
  338. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/api/pairing.py +0 -0
  339. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/api/setup.py +0 -0
  340. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/api/terminals.py +0 -0
  341. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/app.py +0 -0
  342. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/check.py +0 -0
  343. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/config.py +0 -0
  344. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/discovery.py +0 -0
  345. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/health.py +0 -0
  346. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/logging_config.py +0 -0
  347. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/models.py +0 -0
  348. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/operator_auth.py +0 -0
  349. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/pairing.py +0 -0
  350. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/ssh_master.py +0 -0
  351. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/state.py +0 -0
  352. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/terminal.py +0 -0
  353. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/terminal_registry.py +0 -0
  354. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/src/remo_cli/web/tokens.py +0 -0
  355. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/__init__.py +0 -0
  356. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/ansible/__init__.py +0 -0
  357. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/ansible/test_remo_host_idempotency.py +0 -0
  358. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/conftest.py +0 -0
  359. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/e2e/ghostty-shell-io.spec.ts +0 -0
  360. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/e2e/ghostty-tui-compatibility.spec.ts +0 -0
  361. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/e2e/keyboard-routing.spec.ts +0 -0
  362. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/e2e/mobile.spec.ts +0 -0
  363. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/e2e/reconnect.spec.ts +0 -0
  364. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/image/__init__.py +0 -0
  365. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/image/test_docker_image.py +0 -0
  366. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/integration/__init__.py +0 -0
  367. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/integration/_nine_terminal_fixture.py +0 -0
  368. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/integration/orbstack-cloud-init.yml +0 -0
  369. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/integration/orbstack.sh +0 -0
  370. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/integration/test_nine_terminals.py +0 -0
  371. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/integration/test_nine_terminals_soak.py +0 -0
  372. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/integration/test_remo_host_e2e.py +0 -0
  373. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/integration/test_security_rejections.py +0 -0
  374. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/integration/test_terminal_attach.py +0 -0
  375. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/integration/test_web_adopt_e2e.py +0 -0
  376. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/integration/test_web_cli_parity.py +0 -0
  377. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/perf/__init__.py +0 -0
  378. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/perf/test_latency.py +0 -0
  379. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/__init__.py +0 -0
  380. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/cli/__init__.py +0 -0
  381. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/cli/providers/test_aws_snapshot.py +0 -0
  382. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/cli/providers/test_hetzner_snapshot.py +0 -0
  383. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/cli/providers/test_incus_snapshot.py +0 -0
  384. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/cli/providers/test_proxmox_snapshot.py +0 -0
  385. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/cli/test_cp.py +0 -0
  386. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/cli/test_main.py +0 -0
  387. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/cli/test_shell.py +0 -0
  388. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/cli/test_web_adopt_cmd.py +0 -0
  389. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/__init__.py +0 -0
  390. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_ansible_runner.py +0 -0
  391. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_config.py +0 -0
  392. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_known_hosts.py +0 -0
  393. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_output.py +0 -0
  394. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_picker.py +0 -0
  395. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_remo_host_client.py +0 -0
  396. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_rsync.py +0 -0
  397. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_snapshot.py +0 -0
  398. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_ssh.py +0 -0
  399. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_ssh_controlpath.py +0 -0
  400. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_ssh_identity_opts.py +0 -0
  401. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_validation.py +0 -0
  402. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_version.py +0 -0
  403. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_web_adopt_authorize.py +0 -0
  404. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_web_adopt_code.py +0 -0
  405. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_web_adopt_payload.py +0 -0
  406. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_web_adopt_trust.py +0 -0
  407. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/core/test_web_push.py +0 -0
  408. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/models/__init__.py +0 -0
  409. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/models/test_capability.py +0 -0
  410. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/models/test_discovery.py +0 -0
  411. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/models/test_session_target.py +0 -0
  412. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/providers/__init__.py +0 -0
  413. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/providers/test_aws_snapshot.py +0 -0
  414. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/providers/test_hetzner_snapshot.py +0 -0
  415. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/providers/test_incus_snapshot.py +0 -0
  416. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/providers/test_proxmox_devcontainer_runtime.py +0 -0
  417. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/providers/test_proxmox_snapshot.py +0 -0
  418. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/test_ansible_templates.py +0 -0
  419. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/test_host_model.py +0 -0
  420. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/__init__.py +0 -0
  421. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/_pairing_support.py +0 -0
  422. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/conftest.py +0 -0
  423. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_backpressure.py +0 -0
  424. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_check.py +0 -0
  425. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_csp.py +0 -0
  426. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_discovery.py +0 -0
  427. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_health_states.py +0 -0
  428. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_hosts_mapping.py +0 -0
  429. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_lazy_import.py +0 -0
  430. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_log_redaction.py +0 -0
  431. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_mint_gating.py +0 -0
  432. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_operator_auth.py +0 -0
  433. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_pairing.py +0 -0
  434. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_pairing_origin.py +0 -0
  435. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_setup_api.py +0 -0
  436. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_setup_auth.py +0 -0
  437. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_setup_dormancy.py +0 -0
  438. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_state.py +0 -0
  439. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_terminal_resize.py +0 -0
  440. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_terminals_api.py +0 -0
  441. {remo_cli-2.2.0rc7 → remo_cli-2.2.0rc9}/tests/unit/web/test_tokens.py +0 -0
@@ -105,3 +105,34 @@ jobs:
105
105
 
106
106
  - name: Ruff check
107
107
  run: uv run ruff check src/remo_cli
108
+
109
+ frontend:
110
+ name: Frontend (typecheck + unit + build)
111
+ runs-on: ubuntu-latest
112
+ # Fast, backend-free coverage of the SPA: tsc typecheck, the Vitest
113
+ # unit/component suite (frontend/src/**/*.test.ts), and a production build.
114
+ # The Playwright e2e suite (tests/e2e) is NOT run here — it needs a live
115
+ # `remo web serve` backend (REMO_E2E_BASE_URL); see playwright.config.ts.
116
+ defaults:
117
+ run:
118
+ working-directory: frontend
119
+ steps:
120
+ - uses: actions/checkout@v7
121
+
122
+ - uses: actions/setup-node@v4
123
+ with:
124
+ node-version: "20"
125
+ cache: npm
126
+ cache-dependency-path: frontend/package-lock.json
127
+
128
+ - name: Install dependencies
129
+ run: npm ci
130
+
131
+ - name: Typecheck
132
+ run: npm run lint
133
+
134
+ - name: Unit tests
135
+ run: npm run test
136
+
137
+ - name: Build
138
+ run: npm run build
@@ -170,6 +170,8 @@ uv run remo web serve # Run the browser terminal broker locally
170
170
  cd frontend && npm ci
171
171
  npm run build # tsc -b && vite build -> frontend/dist
172
172
  npm run lint # tsc --noEmit
173
+ npm run test # Vitest unit/component suite (jsdom, no backend)
174
+ npm run test:e2e # Playwright (needs REMO_E2E_BASE_URL -> live remo web serve)
173
175
  ```
174
176
 
175
177
  ## Architecture (Three-Layer)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remo-cli
3
- Version: 2.2.0rc7
3
+ Version: 2.2.0rc9
4
4
  Summary: Remote development environment CLI
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -99,13 +99,16 @@ The SPA is a two-pane **web console**:
99
99
  chips, and an "⚡ Active only" toggle narrow the list; "⊞ Open all · N" opens every available
100
100
  target as a grid.
101
101
  - **Terminal pane** (right). Clicking a row opens that target **solo** (single view); ⌘/Ctrl-click a
102
- row (or its `+` button) **adds** it to a responsive grid (1/2/3 columns by count). Clicking a grid
103
- tile solos it; **Esc** collapses the grid back to the focused terminal; number keys **1–9** jump to
104
- the numbered sessions (⌘ 1–9 add to the grid). Hidden terminals stay connected and keep their
105
- scrollback. Each terminal header shows `provider · instance · region`, connection state, and a
106
- window-control cluster of the display modes **▭ Normal** (single view), **⊞ Grid** (the grid, when
107
- one is available), **⤢ Fullscreen** (the terminal fills the whole window shell chrome hidden, plus
108
- best-effort browser fullscreen), and **✕ Close** with the current mode shown active. Press **f** to
102
+ row (or its `+` button) **adds** it to a responsive grid (1/2/3 columns by count). In a grid, **drag
103
+ a tile's header onto another to swap their positions** (the arrangement persists until the grid is
104
+ rebuilt); the **◻** control solos a tile; **Esc** collapses the grid back to the focused terminal;
105
+ number keys **1–9** jump to the numbered sessions (⌘ 1–9 add to the grid). Hidden terminals stay
106
+ connected and keep their scrollback. Each terminal header shows `provider · instance · region`
107
+ (doubling as the drag handle), connection state, and a
108
+ window-control cluster of the display modes, ordered by how much space they take: **⊞ Grid** (smaller —
109
+ a tile in the grid, when one is available), **◻ Normal** (fills the app's main pane — single view),
110
+ **⤢ Fullscreen** (the terminal fills the whole window — shell chrome hidden, plus best-effort browser
111
+ fullscreen), and **✕ Close** — with the current mode shown active. Press **f** to
109
112
  toggle fullscreen on the focused terminal; **Esc** exits it. Fullscreen is a presentation overlay: it
110
113
  never disturbs the single/grid layout underneath, so exiting returns to exactly where you were.
111
114