Add railway ca manage, fix --refresh-auth cache, add setup reset - #1076
Merged
Conversation
codyde
force-pushed
the
railway/ca-manage-reset-refresh-auth
branch
from
August 11, 2026 04:53
37d832f to
ddac4d1
Compare
codyde
force-pushed
the
railway/settings-menu
branch
from
August 11, 2026 04:57
afa9c4f to
7ccbd80
Compare
codyde
force-pushed
the
railway/ca-manage-reset-refresh-auth
branch
from
August 11, 2026 04:57
ddac4d1 to
238c6ca
Compare
codyde
force-pushed
the
railway/ca-manage-reset-refresh-auth
branch
from
August 11, 2026 05:15
238c6ca to
c835c7b
Compare
codyde
force-pushed
the
railway/settings-menu
branch
from
August 11, 2026 05:56
04e4ed8 to
2007c25
Compare
`railway ca manage` jumps the TUI straight to the manage screen, skipping the front-door menu. `--refresh-auth` now clears the local Claude setup-token cache before re-minting, instead of only skipping the remote reuse check (a stale/revoked cached token previously never got replaced). `railway ca setup --reset`, and a "Reset to default" choice in the interactive prompts, clear saved cloud agent preferences and the cached token together.
Scrolling was clamped to one screenful — a documented workaround for vt100 0.15's view composition underflowing past the screen height. vt100 0.16 fixes that, and ratatui 0.30 (via ratatui-core) drops the exact unicode-width pin that blocked the upgrade. Bump both, migrate the moved Parser::set_size/set_scrollback calls to Screen, drop the one-page ceilings in scroll_by and resize, and pin the behavior with tests: full-depth scroll, multi-notch wheel walks, deep offsets across resizes, churn (output + scroll + reshape interleaved), retention-limit clamping, and a full-frame render from deep history.
* Unlock full scrollback depth in railway ca session panes Scrolling was clamped to one screenful — a documented workaround for vt100 0.15's view composition underflowing past the screen height. vt100 0.16 fixes that, and ratatui 0.30 (via ratatui-core) drops the exact unicode-width pin that blocked the upgrade. Bump both, migrate the moved Parser::set_size/set_scrollback calls to Screen, drop the one-page ceilings in scroll_by and resize, and pin the behavior with tests: full-depth scroll, multi-notch wheel walks, deep offsets across resizes, churn (output + scroll + reshape interleaved), retention-limit clamping, and a full-frame render from deep history. * feat(ca): add Opt+[ to cycle back to the previous session Opt+] already cycles forward through open session panes; this adds the reverse chord. Opt+[ is recognized where the terminal can express it unambiguously: as a real ALT event under the kitty keyboard protocol (which the TUI already enables), or as the composed curly double quote macOS sends when Option is not mapped to Meta. Under legacy Option-as-Meta, Opt+[ is the two bytes ESC [ — identical to the CSI prefix every arrow key starts with — so it never surfaces as a key event there. The chord goes dead in those terminals but can never misfire or steal a cursor key. Also updates the footer hint to advertise both directions.
* Unlock full scrollback depth in railway ca session panes Scrolling was clamped to one screenful — a documented workaround for vt100 0.15's view composition underflowing past the screen height. vt100 0.16 fixes that, and ratatui 0.30 (via ratatui-core) drops the exact unicode-width pin that blocked the upgrade. Bump both, migrate the moved Parser::set_size/set_scrollback calls to Screen, drop the one-page ceilings in scroll_by and resize, and pin the behavior with tests: full-depth scroll, multi-notch wheel walks, deep offsets across resizes, churn (output + scroll + reshape interleaved), retention-limit clamping, and a full-frame render from deep history. * feat(ca): add Opt+[ to cycle back to the previous session Opt+] already cycles forward through open session panes; this adds the reverse chord. Opt+[ is recognized where the terminal can express it unambiguously: as a real ALT event under the kitty keyboard protocol (which the TUI already enables), or as the composed curly double quote macOS sends when Option is not mapped to Meta. Under legacy Option-as-Meta, Opt+[ is the two bytes ESC [ — identical to the CSI prefix every arrow key starts with — so it never surfaces as a key event there. The chord goes dead in those terminals but can never misfire or steal a cursor key. Also updates the footer hint to advertise both directions. * Lead the ca Manage tree with agents instead of projects The Manage screen is about cloud agents, but they rendered at depth 3 of a workspace > project > environment > agent > session tree — two container levels to expand before reaching the thing the screen exists to show, with the environment level almost always a single-child passthrough. Invert the presentation: every environment that has agents is promoted to an always-expanded top-level group, labelled with its project (plus /env when the environment isn't production and the project has several). Agents render directly beneath with their status glyphs, sessions still nested under their agent. Groups sort by liveliness — anything running floats up — then default project, then name; the cursor is anchored by row identity so re-sorts never move the selection. Projects with agent-less environments wait in a collapsible "other projects" tail, default project first and undimmed. The tail opens itself while there are no agents to show (so a fresh account still gets the browse tree, behind a hint) and folds away once groups exist; toggling it by hand sticks. Every environment stays reachable there for n, t, and r — including empty ones in projects whose other environments have agents. Refreshes no longer blank a loaded environment while the reply is in flight, so groups stay put through the wake/sleep watch polls, and a failed refresh keeps the stale list with the error in the status line instead of hiding agents that exist. The data model and RowKind index tuples are unchanged — this is a rework of the rows() flattener, the expansion handlers, and the rendering; myCloudAgents already delivered everything at startup.
codyde
force-pushed
the
railway/ca-manage-reset-refresh-auth
branch
from
August 11, 2026 06:02
50c0d67 to
cb3ecaf
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Three related
railway cafixes:railway ca manage— a new subcommand that opens the TUI directly on the manage screen, skipping the front-door menu (browse_intogeneralizes the existingbrowse()to accept an initial screen).--refresh-authcache bug — previously it only skipped the remote reuse check on an existing agent; the local~/.railway/claude-code-tokencache was still read first inclaude_credentials_cheap, so a stale/revoked cached token could never actually be replaced. It now clears the local cache before falling through to a fresh mint.railway ca setup --reset— clears saved cloud agent preferences (~/.railway/agent-prefs.json) and the cached Claude token together. Also available as a "Reset to default" choice in the interactive prompts when existing preferences are found.Test plan
cargo test --bin railway commands::cloud_agent— 235 passed, including newsetup::tests::reset_*testscargo test --bin railway commands::code::— 19 passedcargo fmt/cargo clippy --bin railwayclean on touched filesrailway ca setup --resetagainst a scratch$HOME— removesagent-prefs.jsonandclaude-code-token, confirmed via--showafterward reporting "No cloud agent preferences yet"railway ca --helplists the newmanagesubcommand