* Fix environment duplication timeout by using background processing
- Add applyChangesInBackground parameter to EnvironmentCreate mutation
- Implement polling mechanism to wait for duplication completion
- Use background processing when duplicating environments to avoid 30s timeout
- Add retry utility with 2-minute timeout and 5-second intervals
- Show progress messages during environment creation and duplication
* Update GraphQL schema with latest API changes
* Improve environment duplication UX with cleaner messaging
- Remove verbose retry logging and status messages for smoother experience
- Keep single "Creating environment..." spinner throughout process
- Add function documentation for wait_for_environment_creation
- Optimize retry timing: start at 1s with 1.5x backoff, max 5s
- Unified success message regardless of duplication mode
* Clean up environment duplication code after review
- Remove ephemeral comments and improve code clarity
- Handle COMMITTED status as success case in polling
- Optimize variable cloning in retry closure
- Update comment to better explain duplication status checking
* Add retry logic with exponential backoff for build log streaming
- Create generic retry utility with configurable attempts and backoff
- Add optional logging callback for better control over retry messages
- Update build/deploy log streaming to retry initial connection attempts
- Silent retries by default for log streaming to avoid noise
* Simplify retry logic to only retry connection establishment
Remove unnecessary wait for first log behavior - just retry the GraphQL subscription connection itself.
* Add CLAUDE.md with development guidance
Provides essential commands and architecture overview for Claude Code to work effectively in this repository.
* Fix clippy warnings
Apply automatic fixes from cargo lint-fix.
* Update CLAUDE.md and apply code formatting
Add guidance to run cargo fmt after making changes and apply formatting.
* start of ssh --tmux flag
* small refactoring
* reconnect sort of working
* auto reconnect on disconnect
* better spinners
* lint fix
* fix tmux connect
* comment
* fix windows
* rename --tmux to --session
* fix mouse scrolling
Only checking stdout().is_terminal() means when running railway unlink
in a non-interactive context, but with visible outputs (e.g. shell
pipeline) the confirmation prompt fails rather than defaulting to "Yes".
We assume it's because the file is too large, but we don't know where the limit comes from and if that's the case. A middleware we use limits multipart field size for example. Logs this so we try to narrow the cause, so we can document the upload limit.
Related to: PRO-4145
The ignore crate from ripgrep, by default, includes standard filters
which automatically ignore files listed in .gitignore and other similar files.
Simply not adding .gitignore manually through add_custom_ignore_filename
has no practical effect, causing files listed in .gitignore to remain ignored.
This commit resolves this issue by explicitly disabling the git_ignore handler
in the standard filters. This behavior has been tested locally to confirm that
it correctly bypasses .gitignore.
Signed-off-by: LER0ever <git@r.rongyi.xyz>
* Properly show external workspaces
We are going away with the concept of a personal workspace. Right now personal workspaces in the CLI have both projects the user is a member of and projects owned by the workspace created for the user when they signed up.
And that workspace created for the user when they signup now has a team, so it appears twice in the selector.
To solve this we stop using `me.projects` and go throught he externalWorkspaces query, displaying each external project in its workspace.
* Cleanup workspace fetching
* Improve messaging when using the deprecated flag