remo-cli 2.2.0rc6__tar.gz → 2.2.0rc7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/PKG-INFO +1 -1
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/TerminalCard.tsx +12 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/terminal/GhosttyRenderer.ts +30 -4
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/terminal/TerminalConnection.ts +85 -2
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/terminal/XtermRenderer.ts +32 -2
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/pyproject.toml +1 -1
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/uv.lock +1 -1
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-analyze/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-checklist/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-clarify/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-constitution/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-converge/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-git-commit/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-git-feature/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-git-initialize/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-git-remote/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-git-validate/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-implement/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-plan/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-specify/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-tasks/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.claude/skills/speckit-taskstoissues/SKILL.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.devcontainer/devcontainer.json +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.dockerignore +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.github/dependabot.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.github/workflows/ci.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.github/workflows/provision.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.github/workflows/release.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.github/workflows/smoke-test-cleanup.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.github/workflows/smoke-test.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.github/workflows/teardown.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.gitignore +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.maverick/checkpoints/feature/implementation_complete.json +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.maverick/checkpoints/feature/phase_${{ index }}_complete.json +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.maverick/checkpoints/feature/validation_complete.json +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/.registry +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/README.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/commands/speckit.git.commit.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/commands/speckit.git.feature.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/commands/speckit.git.initialize.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/commands/speckit.git.remote.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/commands/speckit.git.validate.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/config-template.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/extension.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/git-config.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/scripts/bash/auto-commit.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/scripts/bash/create-new-feature.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/scripts/bash/git-common.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/scripts/powershell/create-new-feature.ps1 +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/feature.json +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/init-options.json +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/integration.json +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/integrations/claude.manifest.json +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/integrations/speckit.manifest.json +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/memory/constitution.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/scripts/bash/common.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/scripts/bash/setup-plan.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/scripts/bash/setup-tasks.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/templates/agent-file-template.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/templates/checklist-template.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/templates/constitution-template.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/templates/plan-template.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/templates/spec-template.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/templates/tasks-template.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/workflows/speckit/workflow.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/workflows/workflow-registry.json +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/AGENTS.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/CLAUDE.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/CONTRIBUTING.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/Dockerfile +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/LICENSE +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/README.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/.ansible-lint +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/README.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/ansible.cfg +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/aws_configure.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/aws_resize.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/aws_site.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/aws_teardown.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/group_vars/all.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/group_vars/incus_containers.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/group_vars/proxmox_containers.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/hetzner_configure.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/hetzner_provision.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/hetzner_resize.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/hetzner_site.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/hetzner_teardown.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/incus_bootstrap.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/incus_configure.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/incus_provision.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/incus_resize.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/incus_site.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/incus_teardown.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/inventory/hosts.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/inventory/incus_containers.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/proxmox_bootstrap.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/proxmox_configure.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/proxmox_provision.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/proxmox_resize.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/proxmox_site.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/proxmox_teardown.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/requirements.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/aws_server/defaults/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/aws_server/tasks/ebs.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/aws_server/tasks/ec2.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/aws_server/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/aws_server/tasks/patch_manager.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/aws_server/tasks/preflight.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/aws_server/tasks/security_group.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/deacon/defaults/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/deacon/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/devcontainers/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/docker/handlers/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/docker/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/fzf/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/github_cli/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/hetzner_server/defaults/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/hetzner_server/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/incus_bootstrap/defaults/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/incus_bootstrap/handlers/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/incus_bootstrap/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/incus_container/defaults/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/incus_container/handlers/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/incus_container/meta/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/incus_container/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/incus_container/tasks/preflight.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/incus_container_teardown/defaults/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/incus_container_teardown/meta/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/incus_container_teardown/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/nodejs/defaults/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/nodejs/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/proxmox_bootstrap/defaults/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/proxmox_bootstrap/meta/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/proxmox_bootstrap/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/proxmox_container/defaults/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/proxmox_container/handlers/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/proxmox_container/meta/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/proxmox_container/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/proxmox_container/tasks/preflight.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/proxmox_container_teardown/defaults/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/proxmox_container_teardown/meta/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/proxmox_container_teardown/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/user_setup/defaults/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/user_setup/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/user_setup/templates/devshell.sh.j2 +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/user_setup/templates/project-launch.sh.j2 +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/user_setup/templates/project-menu.sh.j2 +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/user_setup/templates/remo-host.sh.j2 +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/zellij/defaults/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/zellij/tasks/main.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/zellij/templates/config.kdl.j2 +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/roles/zellij/templates/layouts/minimal.kdl.j2 +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/ansible/tasks/configure_dev_tools.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/docker/Dockerfile +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/docker/compose.example.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/docker/entrypoint.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/docs/aws.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/docs/hetzner.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/docs/incus.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/docs/install.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/docs/proxmox.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/docs/remo-web-speckit-input.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/docs/remo-web.html +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/docs/web-session-interface.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/index.html +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/package-lock.json +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/package.json +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/public/README.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/public/dist__ghostty-vt.wasm +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/public/ghostty-vt.wasm +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/scripts/copy-ghostty-wasm.mjs +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/api/client.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/AppRoot.tsx +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/AppShell.css +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/AppShell.tsx +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/AwaitingAdoption.css +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/AwaitingAdoption.tsx +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/OfflineOverlay.css +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/OfflineOverlay.tsx +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/PairToSync.css +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/PairToSync.tsx +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/SessionRail.css +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/SessionRail.tsx +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/SettingsPage.css +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/SettingsPage.tsx +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/ShortcutsModal.css +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/ShortcutsModal.tsx +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/TerminalCard.css +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/TopBar.css +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/TopBar.tsx +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/WorkspacePane.css +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/WorkspacePane.tsx +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/providerMeta.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/components/railModel.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/lib/clipboard.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/lib/fullscreen.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/main.tsx +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/state/discovery.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/state/fonts.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/state/health.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/state/settings.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/state/useConsoleKeyboard.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/state/workspace.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/terminal/.gitkeep +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/terminal/RendererAdapter.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/terminal/defaultRenderer.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/theme/fonts.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/src/theme/tokens.css +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/tsconfig.json +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/frontend/vite.config.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/install.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/maverick.yaml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/playwright.config.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/project-menu.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/remo +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/run.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/scripts/setup-aws-oidc.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/001-bootstrap-incus-host/checklists/requirements.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/001-bootstrap-incus-host/checklists/validation.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/001-bootstrap-incus-host/contracts/playbook-interface.yaml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/001-bootstrap-incus-host/contracts/role-interface.yaml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/001-bootstrap-incus-host/data-model.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/001-bootstrap-incus-host/plan.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/001-bootstrap-incus-host/quickstart.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/001-bootstrap-incus-host/research.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/001-bootstrap-incus-host/spec.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/001-bootstrap-incus-host/tasks.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/002-incus-container-support/checklists/requirements.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/002-incus-container-support/contracts/playbook-interface.yaml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/002-incus-container-support/contracts/role-interface.yaml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/002-incus-container-support/data-model.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/002-incus-container-support/plan.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/002-incus-container-support/quickstart.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/002-incus-container-support/research.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/002-incus-container-support/spec.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/002-incus-container-support/tasks.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/003-python-cli-rewrite/checklists/requirements.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/003-python-cli-rewrite/data-model.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/003-python-cli-rewrite/plan.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/003-python-cli-rewrite/quickstart.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/003-python-cli-rewrite/research.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/003-python-cli-rewrite/spec.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/003-python-cli-rewrite/tasks.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/004-proxmox-container-support/spec.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/005-provider-snapshots/checklists/requirements.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/005-provider-snapshots/contracts/cli-surface.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/005-provider-snapshots/data-model.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/005-provider-snapshots/plan.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/005-provider-snapshots/quickstart.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/005-provider-snapshots/research.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/005-provider-snapshots/spec.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/005-provider-snapshots/tasks.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/010-web-session-interface/checklists/requirements.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/010-web-session-interface/contracts/remo-host-protocol.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/010-web-session-interface/contracts/rest-api.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/010-web-session-interface/contracts/terminal-websocket.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/010-web-session-interface/data-model.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/010-web-session-interface/plan.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/010-web-session-interface/quickstart.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/010-web-session-interface/research.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/010-web-session-interface/spec.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/010-web-session-interface/tasks.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/011-web-adopt/checklists/requirements.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/011-web-adopt/contracts/cli-web-adopt.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/011-web-adopt/contracts/setup-api.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/011-web-adopt/data-model.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/011-web-adopt/plan.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/011-web-adopt/quickstart-results.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/011-web-adopt/quickstart.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/011-web-adopt/research.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/011-web-adopt/spec.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/011-web-adopt/tasks.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/012-web-adopt-pairing/contracts/cli-web-adopt.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/012-web-adopt-pairing/contracts/pairing-api.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/012-web-adopt-pairing/contracts/setup-api.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/012-web-adopt-pairing/data-model.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/012-web-adopt-pairing/plan.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/012-web-adopt-pairing/quickstart.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/012-web-adopt-pairing/research.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/012-web-adopt-pairing/spec.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/specs/012-web-adopt-pairing/tasks.md +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/__main__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/cli/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/cli/cp.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/cli/main.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/cli/providers/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/cli/providers/aws.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/cli/providers/hetzner.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/cli/providers/incus.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/cli/providers/proxmox.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/cli/shell.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/cli/web.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/ansible_runner.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/completion.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/config.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/known_hosts.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/output.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/picker.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/remo_host_client.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/rsync.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/snapshot.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/ssh.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/validation.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/version.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/core/web_adopt.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/models/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/models/capability.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/models/discovery.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/models/host.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/models/session_target.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/models/snapshot.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/providers/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/providers/aws.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/providers/hetzner.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/providers/incus.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/providers/proxmox.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/api/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/api/hosts.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/api/pairing.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/api/setup.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/api/terminals.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/app.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/check.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/config.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/discovery.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/health.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/logging_config.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/models.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/operator_auth.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/pairing.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/ssh_master.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/state.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/terminal.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/terminal_registry.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/src/remo_cli/web/tokens.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/ansible/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/ansible/test_remo_host_idempotency.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/conftest.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/e2e/fixtures.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/e2e/ghostty-shell-io.spec.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/e2e/ghostty-tui-compatibility.spec.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/e2e/keyboard-routing.spec.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/e2e/mobile.spec.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/e2e/reconnect.spec.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/e2e/workspace-layout.spec.ts +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/image/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/image/test_docker_image.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/integration/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/integration/_nine_terminal_fixture.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/integration/orbstack-cloud-init.yml +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/integration/orbstack.sh +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/integration/test_nine_terminals.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/integration/test_nine_terminals_soak.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/integration/test_remo_host_e2e.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/integration/test_security_rejections.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/integration/test_terminal_attach.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/integration/test_web_adopt_e2e.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/integration/test_web_cli_parity.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/perf/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/perf/test_latency.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/cli/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/cli/providers/test_aws_snapshot.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/cli/providers/test_hetzner_snapshot.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/cli/providers/test_incus_snapshot.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/cli/providers/test_proxmox_snapshot.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/cli/test_cp.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/cli/test_main.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/cli/test_shell.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/cli/test_web_adopt_cmd.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_ansible_runner.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_config.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_known_hosts.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_output.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_picker.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_remo_host_client.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_rsync.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_snapshot.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_ssh.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_ssh_controlpath.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_ssh_identity_opts.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_validation.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_version.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_web_adopt_authorize.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_web_adopt_code.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_web_adopt_payload.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_web_adopt_trust.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/core/test_web_push.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/models/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/models/test_capability.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/models/test_discovery.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/models/test_session_target.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/providers/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/providers/test_aws_snapshot.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/providers/test_hetzner_snapshot.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/providers/test_incus_snapshot.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/providers/test_proxmox_devcontainer_runtime.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/providers/test_proxmox_snapshot.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/test_ansible_templates.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/test_host_model.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/__init__.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/_pairing_support.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/conftest.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_backpressure.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_check.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_csp.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_discovery.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_health_states.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_hosts_mapping.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_lazy_import.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_log_redaction.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_mint_gating.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_operator_auth.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_pairing.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_pairing_origin.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_setup_api.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_setup_auth.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_setup_dormancy.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_state.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_terminal_resize.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_terminals_api.py +0 -0
- {remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/tests/unit/web/test_tokens.py +0 -0
|
@@ -257,6 +257,18 @@ export function TerminalCard({
|
|
|
257
257
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
258
258
|
}, [target.id, settings.renderer]);
|
|
259
259
|
|
|
260
|
+
// Move DOM keyboard focus into the terminal whenever this card becomes the
|
|
261
|
+
// focused, visible one — e.g. after clicking a rail row (selectOnly) or a
|
|
262
|
+
// number-key jump. Without this the card is "focused" in workspace state (our
|
|
263
|
+
// input gate opens) but the xterm textarea has no DOM focus, so keystrokes go
|
|
264
|
+
// nowhere until the user clicks into the surface. Guarded on isVisible: a
|
|
265
|
+
// hidden card must never steal focus.
|
|
266
|
+
useEffect(() => {
|
|
267
|
+
if (isFocused && isVisible) {
|
|
268
|
+
adapterRef.current?.focus();
|
|
269
|
+
}
|
|
270
|
+
}, [isFocused, isVisible]);
|
|
271
|
+
|
|
260
272
|
const handleReconnect = useCallback(() => {
|
|
261
273
|
setError(null);
|
|
262
274
|
void connectionRef.current?.reconnect();
|
|
@@ -33,6 +33,9 @@ export class GhosttyRenderer implements RendererAdapter {
|
|
|
33
33
|
private readonly terminal: Terminal;
|
|
34
34
|
private container: HTMLElement | null = null;
|
|
35
35
|
private font: TerminalFontOptions;
|
|
36
|
+
/** Input subscribers — see XtermRenderer for the rationale (fan real input in,
|
|
37
|
+
* plus synthesize Shift+Enter, through one path). */
|
|
38
|
+
private readonly dataHandlers = new Set<(data: Uint8Array | string) => void>();
|
|
36
39
|
|
|
37
40
|
constructor(font: TerminalFontOptions = DEFAULT_FONT) {
|
|
38
41
|
this.font = font;
|
|
@@ -42,6 +45,31 @@ export class GhosttyRenderer implements RendererAdapter {
|
|
|
42
45
|
fontFamily: font.fontFamily,
|
|
43
46
|
fontSize: font.fontSize,
|
|
44
47
|
});
|
|
48
|
+
this.terminal.onData((data: string | Uint8Array) => this.emit(data));
|
|
49
|
+
// Best-effort Shift+Enter → ESC+CR (newline), matching XtermRenderer. Guarded
|
|
50
|
+
// because ghostty-web's custom-key-handler API is unconfirmed at 0.4.0; if
|
|
51
|
+
// absent this is a no-op and Shift+Enter falls back to the engine default.
|
|
52
|
+
const t = this.terminal as unknown as {
|
|
53
|
+
attachCustomKeyEventHandler?: (h: (e: KeyboardEvent) => boolean) => void;
|
|
54
|
+
};
|
|
55
|
+
t.attachCustomKeyEventHandler?.((e) => this.handleKeyEvent(e));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private emit(data: Uint8Array | string): void {
|
|
59
|
+
for (const handler of this.dataHandlers) {
|
|
60
|
+
handler(data);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
private handleKeyEvent(e: KeyboardEvent): boolean {
|
|
65
|
+
if (e.key === "Enter" && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey) {
|
|
66
|
+
if (e.type === "keydown") {
|
|
67
|
+
e.preventDefault();
|
|
68
|
+
this.emit("\x1b\r");
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
45
73
|
}
|
|
46
74
|
|
|
47
75
|
open(container: HTMLElement): void {
|
|
@@ -54,10 +82,8 @@ export class GhosttyRenderer implements RendererAdapter {
|
|
|
54
82
|
}
|
|
55
83
|
|
|
56
84
|
onData(handler: (data: Uint8Array | string) => void): () => void {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
| undefined;
|
|
60
|
-
return () => disposable?.dispose();
|
|
85
|
+
this.dataHandlers.add(handler);
|
|
86
|
+
return () => this.dataHandlers.delete(handler);
|
|
61
87
|
}
|
|
62
88
|
|
|
63
89
|
fit(): TerminalDimensions {
|
|
@@ -65,6 +65,13 @@ export class TerminalConnection {
|
|
|
65
65
|
private reconnectAttempts = 0;
|
|
66
66
|
private reconnectTimer: ReturnType<typeof setTimeout> | undefined;
|
|
67
67
|
private _needsManualReconnect = false;
|
|
68
|
+
/** True while an attach() is between requesting a fresh terminal and having a
|
|
69
|
+
* socket assigned — serializes the burst of wake events (visibilitychange +
|
|
70
|
+
* focus + online all fire near-simultaneously on resume). */
|
|
71
|
+
private attaching = false;
|
|
72
|
+
/** Bumped each attach() so a slow, superseded attach can't assign a socket. */
|
|
73
|
+
private attachGen = 0;
|
|
74
|
+
private wakeListenersBound = false;
|
|
68
75
|
|
|
69
76
|
constructor(
|
|
70
77
|
sessionTargetId: string,
|
|
@@ -88,6 +95,7 @@ export class TerminalConnection {
|
|
|
88
95
|
|
|
89
96
|
/** Starts the initial connection. Call once after construction. */
|
|
90
97
|
async connect(): Promise<void> {
|
|
98
|
+
this.addWakeListeners();
|
|
91
99
|
await this.attach("connecting");
|
|
92
100
|
}
|
|
93
101
|
|
|
@@ -121,6 +129,7 @@ export class TerminalConnection {
|
|
|
121
129
|
/** Client-initiated clean close (WS code 1000) plus server-side cleanup. */
|
|
122
130
|
async close(): Promise<void> {
|
|
123
131
|
this.clientInitiatedClose = true;
|
|
132
|
+
this.removeWakeListeners();
|
|
124
133
|
this.clearReconnectTimer();
|
|
125
134
|
const socket = this.socket;
|
|
126
135
|
const terminalId = this.terminalId;
|
|
@@ -157,8 +166,70 @@ export class TerminalConnection {
|
|
|
157
166
|
}
|
|
158
167
|
}
|
|
159
168
|
|
|
169
|
+
private addWakeListeners(): void {
|
|
170
|
+
if (this.wakeListenersBound) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
this.wakeListenersBound = true;
|
|
174
|
+
if (typeof window !== "undefined") {
|
|
175
|
+
window.addEventListener("online", this.onWake);
|
|
176
|
+
window.addEventListener("focus", this.onWake);
|
|
177
|
+
}
|
|
178
|
+
if (typeof document !== "undefined") {
|
|
179
|
+
document.addEventListener("visibilitychange", this.onWake);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
private removeWakeListeners(): void {
|
|
184
|
+
if (!this.wakeListenersBound) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
this.wakeListenersBound = false;
|
|
188
|
+
if (typeof window !== "undefined") {
|
|
189
|
+
window.removeEventListener("online", this.onWake);
|
|
190
|
+
window.removeEventListener("focus", this.onWake);
|
|
191
|
+
}
|
|
192
|
+
if (typeof document !== "undefined") {
|
|
193
|
+
document.removeEventListener("visibilitychange", this.onWake);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Regaining focus/visibility/connectivity (e.g. reopening a slept laptop lid)
|
|
198
|
+
// is our cue that a socket that died while backgrounded should recover NOW,
|
|
199
|
+
// rather than waiting out a backoff that may have already been exhausted while
|
|
200
|
+
// hidden. Reset the auto-retry budget and force a fresh attach.
|
|
201
|
+
private readonly onWake = (): void => {
|
|
202
|
+
if (typeof document !== "undefined" && document.visibilityState === "hidden") {
|
|
203
|
+
return; // visibilitychange firing on the way OUT — ignore.
|
|
204
|
+
}
|
|
205
|
+
if (this.clientInitiatedClose || this.state === "closed" || this.attaching) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const readyState = this.socket?.readyState;
|
|
209
|
+
if (readyState === WebSocket.OPEN) {
|
|
210
|
+
// Looks alive; prod it so a silently-dead (post-sleep) socket surfaces an
|
|
211
|
+
// onclose and takes the reconnect path. Best-effort — a throw here just
|
|
212
|
+
// means the close is imminent anyway.
|
|
213
|
+
try {
|
|
214
|
+
this.sendPing();
|
|
215
|
+
} catch {
|
|
216
|
+
/* dead socket; onclose will drive the reconnect */
|
|
217
|
+
}
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (readyState === WebSocket.CONNECTING) {
|
|
221
|
+
return; // a handshake is already in flight.
|
|
222
|
+
}
|
|
223
|
+
this._needsManualReconnect = false;
|
|
224
|
+
this.reconnectAttempts = 0;
|
|
225
|
+
this.clearReconnectTimer();
|
|
226
|
+
void this.attach("reconnecting");
|
|
227
|
+
};
|
|
228
|
+
|
|
160
229
|
/** Creates a fresh terminal_id + token and opens a new WS to it. */
|
|
161
230
|
private async attach(nextState: "connecting" | "reconnecting"): Promise<void> {
|
|
231
|
+
const gen = ++this.attachGen;
|
|
232
|
+
this.attaching = true;
|
|
162
233
|
this.clientInitiatedClose = false;
|
|
163
234
|
this.setState(nextState);
|
|
164
235
|
|
|
@@ -166,7 +237,17 @@ export class TerminalConnection {
|
|
|
166
237
|
try {
|
|
167
238
|
created = await createTerminal(this.sessionTargetId, this.cols, this.rows);
|
|
168
239
|
} catch (error) {
|
|
169
|
-
this.
|
|
240
|
+
this.attaching = false;
|
|
241
|
+
// A newer attach (e.g. a wake-triggered one) has superseded this; stay quiet.
|
|
242
|
+
if (gen === this.attachGen) {
|
|
243
|
+
this.handleFatalError(error);
|
|
244
|
+
}
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Superseded while awaiting the fresh terminal — don't open a second socket.
|
|
249
|
+
if (gen !== this.attachGen) {
|
|
250
|
+
this.attaching = false;
|
|
170
251
|
return;
|
|
171
252
|
}
|
|
172
253
|
|
|
@@ -174,6 +255,7 @@ export class TerminalConnection {
|
|
|
174
255
|
const socket = openTerminalSocket(created.terminal_id, created.ws_token);
|
|
175
256
|
socket.binaryType = "arraybuffer";
|
|
176
257
|
this.socket = socket;
|
|
258
|
+
this.attaching = false;
|
|
177
259
|
|
|
178
260
|
socket.onopen = () => {
|
|
179
261
|
// Server confirms readiness via the `ready` control frame, not onopen.
|
|
@@ -274,7 +356,8 @@ export class TerminalConnection {
|
|
|
274
356
|
this.reconnectTimer = setTimeout(resolve, delay);
|
|
275
357
|
});
|
|
276
358
|
|
|
277
|
-
if (this.clientInitiatedClose) {
|
|
359
|
+
if (this.clientInitiatedClose || this.attaching || this.socket) {
|
|
360
|
+
// A wake-triggered reconnect already took over while we were backing off.
|
|
278
361
|
return;
|
|
279
362
|
}
|
|
280
363
|
await this.attach("reconnecting");
|
|
@@ -44,6 +44,10 @@ export class XtermRenderer implements RendererAdapter {
|
|
|
44
44
|
/** Desired ligature state; the addon is only actually (un)loaded after
|
|
45
45
|
* open() since it registers a character joiner that needs an opened terminal. */
|
|
46
46
|
private ligaturesEnabled = false;
|
|
47
|
+
/** Input subscribers. We fan xterm's own onData into these AND synthesize
|
|
48
|
+
* input for keys xterm doesn't distinguish (Shift+Enter), so both reach the
|
|
49
|
+
* remote PTY through the same path. */
|
|
50
|
+
private readonly dataHandlers = new Set<(data: Uint8Array | string) => void>();
|
|
47
51
|
|
|
48
52
|
constructor(font: TerminalFontOptions = DEFAULT_FONT) {
|
|
49
53
|
this.terminal = new Terminal({
|
|
@@ -58,9 +62,35 @@ export class XtermRenderer implements RendererAdapter {
|
|
|
58
62
|
});
|
|
59
63
|
this.fitAddon = new FitAddon();
|
|
60
64
|
this.terminal.loadAddon(this.fitAddon);
|
|
65
|
+
// Real typed input flows through here to every subscriber.
|
|
66
|
+
this.terminal.onData((data: string) => this.emit(data));
|
|
67
|
+
// Distinguish Shift+Enter from Enter: xterm sends a plain CR for both, but
|
|
68
|
+
// Claude Code and other TUIs expect Shift+Enter to insert a newline. Emit
|
|
69
|
+
// ESC+CR (what `claude /terminal-setup` configures desktop terminals to
|
|
70
|
+
// send) and suppress xterm's default CR so it isn't ALSO submitted.
|
|
71
|
+
this.terminal.attachCustomKeyEventHandler((e) => this.handleKeyEvent(e));
|
|
61
72
|
this.applyLigatures(font.ligatures);
|
|
62
73
|
}
|
|
63
74
|
|
|
75
|
+
private emit(data: Uint8Array | string): void {
|
|
76
|
+
for (const handler of this.dataHandlers) {
|
|
77
|
+
handler(data);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
private handleKeyEvent(e: KeyboardEvent): boolean {
|
|
82
|
+
if (e.key === "Enter" && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey) {
|
|
83
|
+
if (e.type === "keydown") {
|
|
84
|
+
// preventDefault stops the browser from also inserting a newline into
|
|
85
|
+
// xterm's hidden textarea (which would double-send via its input event).
|
|
86
|
+
e.preventDefault();
|
|
87
|
+
this.emit("\x1b\r");
|
|
88
|
+
}
|
|
89
|
+
return false; // suppress xterm's default CR (which would submit the line)
|
|
90
|
+
}
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
|
|
64
94
|
private applyLigatures(enabled: boolean): void {
|
|
65
95
|
this.ligaturesEnabled = enabled;
|
|
66
96
|
// @xterm/addon-ligatures calls registerCharacterJoiner in activate(), which
|
|
@@ -110,8 +140,8 @@ export class XtermRenderer implements RendererAdapter {
|
|
|
110
140
|
}
|
|
111
141
|
|
|
112
142
|
onData(handler: (data: Uint8Array | string) => void): () => void {
|
|
113
|
-
|
|
114
|
-
return () =>
|
|
143
|
+
this.dataHandlers.add(handler);
|
|
144
|
+
return () => this.dataHandlers.delete(handler);
|
|
115
145
|
}
|
|
116
146
|
|
|
117
147
|
fit(): TerminalDimensions {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.maverick/checkpoints/feature/implementation_complete.json
RENAMED
|
File without changes
|
|
File without changes
|
{remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.maverick/checkpoints/feature/validation_complete.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/commands/speckit.git.commit.md
RENAMED
|
File without changes
|
{remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/commands/speckit.git.feature.md
RENAMED
|
File without changes
|
{remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/commands/speckit.git.initialize.md
RENAMED
|
File without changes
|
{remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/commands/speckit.git.remote.md
RENAMED
|
File without changes
|
{remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/commands/speckit.git.validate.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/scripts/bash/create-new-feature.sh
RENAMED
|
File without changes
|
|
File without changes
|
{remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/scripts/bash/initialize-repo.sh
RENAMED
|
File without changes
|
{remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/scripts/powershell/auto-commit.ps1
RENAMED
|
File without changes
|
|
File without changes
|
{remo_cli-2.2.0rc6 → remo_cli-2.2.0rc7}/.specify/extensions/git/scripts/powershell/git-common.ps1
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|