Workspaces returned by `me.workspaces` and `externalWorkspaces` can
overlap when a user has both workspace membership and project-level
access to the same workspace, causing duplicates in `railway list`,
`railway project list`, and `railway whoami --json`. Dedupe by id
while merging, preferring the Member variant (richer data).
Closes#844, #831.
* Fix deprecated GraphQL field usage
Migrate from deprecated service.serviceInstances and volume.volumeInstances
to environment.serviceInstances and environment.volumeInstances. Also removes
deprecated team field usage in favor of workspace id.
* Extract common service/environment lookup helpers
- Add get_service_ids_in_env() and find_service_instance() to controllers/project.rs
- Add build_service_env_map! macro in link.rs
- Replace duplicated lookup patterns across commands
* 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
* 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