Repository navigation
[rushd][WS4] CLI client & command surface #5899
Copy link
Copy link
Open
Labels
Description
Build the separate CLI client package/bin (@rushstack/rush-cli-client on @rushstack/rush-client-core) and its command surface — fallback/opt-in routing, rush daemon subcommands, the rush.json daemon config block + env overrides, an experimental rush daemon graph reference client, and a standalone rushx-equivalent bin — all opt-in until cutover.
Depends on: #5896; #5897; #5898
Scope
rush-client-core+rush-cli-clientbin. Connect/forward/pump, the request envelope (argv,cwd,env,columns,colorLevel), stream pumping, exit-code relay, and cancel-on-signal — with noSIGWINCHforwarding (the client owns width/resize).- Fallback/opt-in routing. Decide daemon vs in-process per invocation from
RUSH_DAEMON,--no-daemon,rush.jsonconfig, CI detection, and the never-daemonize list (routing to today's in-process path otherwise). rush.jsondaemon config. A validateddaemonblock (enabled,idleTimeoutSeconds,autoStart,watch,queueTimeoutSeconds, plus the WS3 warm-set knobs) withRUSH_DAEMON*env overrides.rush daemonsubcommands.start|stop|restart|status|logs(themselves never-daemonized);statussurfaces warm-set + lifecycle info (uptime, PID, reload tier, warm projects, memory) andlogsstreams the daemon log.- Experimental
rush daemon graph. BehindRUSH_DAEMON_EXPERIMENTAL=1,show/status/scope-in/scope-out/invalidate/watch/pause/resumeover the warm graph, serving as a reference "third client" that consumes only structured events. - Standalone
rushx-equivalent. Run the cwd project's package script with the same auto-start/forward behavior; it becomesrushxat cutover (WS5).
Acceptance criteria
- The client connects, sends the request envelope, pumps stdout/stderr/stdin, and relays the daemon's exit code; Ctrl+C cancels the request;
SIGWINCHis handled client-side and not forwarded; a samplerush buildvia the client is behaviorally equivalent to in-process (full matrix in WS5). - Each routing input (
RUSH_DAEMON,--no-daemon, config, CI, never-daemonize) selects the correct path with a documented precedence order; CI defaults to in-process (no auto-start) unless explicitly opted in. - The
rush.jsondaemonschema is published and validates the block (rejecting unknown/invalid values) with precedence env > config > default. - Each
rush daemonsubcommand acts against a running (or absent) daemon with correct exit codes;statusreports warm-set + lifecycle info andlogsstreams the daemon log (see WS5). - The experimental
rush daemon graphverbs operate over the warm graph via the protocol only (no rush-lib-internal calls), consume only the presentation-free event contract, and stay gated off unlessRUSH_DAEMON_EXPERIMENTAL=1. - The standalone
rushx-equivalent resolves the project by cwd, forwards with auto-start, and matches today'srushxoutput/exit code for a sample script. -
rush-client-corehas norush-libdependency and commits its API Extractor report; everything ships opt-in until cutover; tests green in CI.
Part of #5894.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsNeeds triage
Activity