Skip to content

fix(install): show progress during npm install in non-interactive mode#76355

Merged
steipete merged 1 commit into
openclaw:mainfrom
SebTardif:fix/npm-install-progress
May 30, 2026
Merged

fix(install): show progress during npm install in non-interactive mode#76355
steipete merged 1 commit into
openclaw:mainfrom
SebTardif:fix/npm-install-progress

Conversation

@SebTardif

@SebTardif SebTardif commented May 3, 2026

Copy link
Copy Markdown
Contributor

Problem

When running curl -fsSL https://openclaw.ai/install.sh | bash, gum is disabled because stdin is a pipe (is_non_interactive_shell returns true). Without gum, run_npm_global_install silently redirects all output to a temp log file (line 751):

"${cmd[@]}" >"$log" 2>&1

Users see no feedback during the npm install step, which can take 60+ seconds. The gum branch already shows "Installing OpenClaw package" via run_with_spinner, but the no-gum fallback is completely silent.

Fix

Add ui_info "Installing OpenClaw package" before the silent npm command in the no-gum branch, matching the pattern from PR #71720 that was applied to run_quiet_step.

Closes #82305

Real behavior proof

Behavior addressed: in non-interactive mode (piped stdin, no gum), the npm install step now shows a progress message instead of running silently for 60+ seconds.
Real environment tested: Linux x86_64, OpenClaw 2026.5.12 already installed, Node v26.0.0, npm 11.12.1. Ran bash scripts/install.sh --install-method npm < /dev/null to simulate curl | bash non-interactive mode.
Exact steps or command run after this patch: (1) checked out upstream/main install.sh, ran bash scripts/install.sh --install-method npm < /dev/null 2>&1 and captured output; (2) applied the one-line fix, ran the same command again and captured output; (3) compared the install section output.
Evidence after fix: terminal output copied below.

Before (upstream/main, no progress line):

$ bash scripts/install.sh --install-method npm < /dev/null 2>&1 | grep -A2 "Installing OpenClaw v"
· Installing OpenClaw v2026.5.12
✓ OpenClaw npm package installed
✓ OpenClaw installed

After (with ui_info added):

$ bash scripts/install.sh --install-method npm < /dev/null 2>&1 | grep -A3 "Installing OpenClaw v"
· Installing OpenClaw v2026.5.12
· Installing OpenClaw package
✓ OpenClaw npm package installed
✓ OpenClaw installed

Full install section before:

[2/3] Installing OpenClaw
✓ Git already installed
· Installing OpenClaw v2026.5.12
✓ OpenClaw npm package installed
✓ OpenClaw installed

Full install section after:

[2/3] Installing OpenClaw
✓ Git already installed
· Installing OpenClaw v2026.5.12
· Installing OpenClaw package
✓ OpenClaw npm package installed
✓ OpenClaw installed

Observed result after fix: the "Installing OpenClaw package" progress line now appears between the version announcement and the completion checkmark, matching the text shown by the gum spinner branch in interactive mode. No other output changed.
What was not tested: gum/spinner interactive path (gum is only available when stdin is a tty, which this non-interactive proof intentionally disables). The gum branch already shows this text via run_with_spinner and is unchanged by this PR.

@clawsweeper

clawsweeper Bot commented May 3, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

Latest ClawSweeper review: 2026-05-24 02:19 UTC / May 23, 2026, 10:19 PM ET.

Workflow note: Future ClawSweeper reviews update this same comment in place.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

PR Surface
Other +1. Total +1 across 1 file.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 0 0 0 0
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 1 1 0 +1
Total 1 1 0 +1

Summary
The PR adds ui_info "Installing OpenClaw package" before the non-gum npm global install fallback redirects npm output to its temp log.

Reproducibility: yes. Source inspection shows piped or otherwise non-interactive installs disable gum and the no-gum npm branch redirects output without a progress line; the PR body also supplies before/after terminal output for that path.

PR rating
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Summary: Good narrow installer UX fix with sufficient terminal proof and no blocking findings; full installer smoke remains the normal landing gate.

Rank-up moves:

  • Run the normal installer smoke or website installer sync validation before landing.
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Real behavior proof
Sufficient (live_output): The PR body includes copied before/after terminal output from a real non-interactive installer run showing the new progress line after the patch.

Risk before merge

  • This read-only review did not execute a real npm global install because that would modify the machine; normal installer smoke or website installer sync validation should still gate landing.

Maintainer options:

  1. Decide the mitigation before merge
    Merge the one-line installer progress fix after normal installer validation, letting [Bug]: No progress feedback during npm install in non-interactive (piped) mode #82305 close when this PR lands.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge
No repair lane is needed; the active PR is narrow, proof-backed, and has no actionable code findings for automation to fix.

Security
Cleared: The diff only adds an informational installer message and does not change downloads, dependency resolution, permissions, secrets, or execution flow.

Review details

Best possible solution:

Merge the one-line installer progress fix after normal installer validation, letting #82305 close when this PR lands.

Do we have a high-confidence way to reproduce the issue?

Yes. Source inspection shows piped or otherwise non-interactive installs disable gum and the no-gum npm branch redirects output without a progress line; the PR body also supplies before/after terminal output for that path.

Is this the best way to solve the issue?

Yes. Adding the same progress text immediately before the silent fallback command is the narrowest maintainable fix and leaves npm execution, retries, logging, and the gum spinner branch unchanged.

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes copied before/after terminal output from a real non-interactive installer run showing the new progress line after the patch.

Label justifications:

  • P2: A non-interactive installer path can appear stalled during a long npm install, but the fix is narrow and limited to installer progress output.
  • rating: 🐚 platinum hermit: Current PR rating is 🐚 platinum hermit because proof is 🦞 diamond lobster, patch quality is 🐚 platinum hermit, and Good narrow installer UX fix with sufficient terminal proof and no blocking findings; full installer smoke remains the normal landing gate.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body includes copied before/after terminal output from a real non-interactive installer run showing the new progress line after the patch.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes copied before/after terminal output from a real non-interactive installer run showing the new progress line after the patch.

What I checked:

  • Non-interactive installs disable gum: is_non_interactive_shell treats piped stdin or non-TTY stdout as non-interactive, and bootstrap_gum_temp returns before enabling gum in that mode. (scripts/install.sh:83, 069c7b87eb67)
  • Current no-gum npm branch is silent: Current main runs the gum spinner with the desired title when gum is available, but the fallback path immediately redirects npm output to the log without first printing progress. (scripts/install.sh:752, 069c7b87eb67)
  • Existing installer pattern supports fallback progress lines: run_quiet_step already prints ui_info "${title}" when gum cannot run, so the PR follows the established no-gum progress convention. (scripts/install.sh:483, 069c7b87eb67)
  • PR diff is narrow: The provided PR diff for head 03192ae0ee0a5f4f66552ec2f2c321b0424e69f8 adds exactly one ui_info "Installing OpenClaw package" line before the silent fallback command. (scripts/install.sh:758, 03192ae0ee0a)
  • Prior related progress work: Merged progress work in ea4da7dfcc5227cf73fc26c63f635fa9c8945c49 added the no-gum run_quiet_step progress behavior this PR mirrors. (scripts/install.sh:483, ea4da7dfcc52)
  • Current installer history: git blame ties the current run_npm_global_install fallback, including the silent redirect line, to the current installer copy in commit 77d115761805a8578e1c876093189b3d7d6acff3. (scripts/install.sh:761, 77d115761805)

Likely related people:

  • SebTardif: Authored merged installer progress work in scripts/install.sh that added the no-gum run_quiet_step progress pattern this PR extends. (role: related progress contributor; confidence: high; commits: ea4da7dfcc52, 8803b2ed737d; files: scripts/install.sh)
  • Jason O'Neal: git blame attributes the current run_npm_global_install implementation and silent fallback line to this author in the available main history. (role: current installer code author; confidence: medium; commits: 77d115761805; files: scripts/install.sh)
  • steipete: The same blame range shows Peter Steinberger as committer for the current installer copy that contains the affected npm fallback path. (role: current installer committer; confidence: medium; commits: 77d115761805, a374c3a5bfd5; files: scripts/install.sh)

Codex review notes: model gpt-5.5, reasoning high; reviewed against 069c7b87eb67.

@SebTardif
SebTardif force-pushed the fix/npm-install-progress branch from 9c7064d to 7042da6 Compare May 9, 2026 01:36
@openclaw-barnacle openclaw-barnacle Bot added the triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. label May 9, 2026
@SebTardif
SebTardif force-pushed the fix/npm-install-progress branch 2 times, most recently from 60ce8b9 to 868e8fd Compare May 13, 2026 02:22
@SebTardif
SebTardif force-pushed the fix/npm-install-progress branch from 868e8fd to 577d82e Compare May 17, 2026 02:29
@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 17, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. P2 Normal backlog priority with limited blast radius. labels May 17, 2026
@SebTardif SebTardif closed this May 17, 2026
@SebTardif SebTardif reopened this May 17, 2026
@SebTardif
SebTardif force-pushed the fix/npm-install-progress branch from 577d82e to baed7e1 Compare May 18, 2026 22:51
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 18, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels May 18, 2026
@SebTardif

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 23, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper

clawsweeper Bot commented May 23, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

✨ Hatched: 🥚 common Moonlit Shellbean

Hatch command

Comment @clawsweeper hatch when this PR is hatchable.

Hatchability rules:

  • Merged PRs are hatchable.
  • Open PRs are hatchable when they are status: 👀 ready for maintainer look, status: 🚀 automerge armed, or labeled clawsweeper:automerge.
  • Closed unmerged PRs are hatchable only when one of those hatchable labels is still present in the durable record.

Rarity: 🥚 common.
Trait: sleeps inside passing CI.
Image traits: location merge queue dock; accessory release bell; palette cobalt, lime, and pearl; mood mischievous; pose leaning over a miniature review desk; shell glossy opal shell; lighting golden review-room light; background quiet workflow signs.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Moonlit Shellbean in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • Hatchability usually comes from sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness. A merged PR is already final, so merge makes the egg hatchable independently.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

When running via curl | bash, gum is disabled and run_npm_global_install
silently redirects all output to a temp log file. Users see no feedback
during the npm install step which can take 60+ seconds.

Add ui_info before the silent npm command to match the spinner text
shown in the gum branch.

Closes openclaw#82305

Signed-off-by: Sebastien Tardif <[email protected]>
@SebTardif
SebTardif force-pushed the fix/npm-install-progress branch from baed7e1 to 03192ae Compare May 24, 2026 02:14
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 24, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 24, 2026
@RomneyDa

Copy link
Copy Markdown
Member

Heads up: this PR needs to be updated against current main before the new required Dependency Guard check can pass.

@steipete steipete self-assigned this May 30, 2026

@steipete steipete left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the one-line installer fallback change against current origin/main; no blocking findings.

Verification:

  • git pull --ff-only
  • gh pr diff 76355 --repo openclaw/openclaw --patch
  • bash -n scripts/install.sh
  • OPENCLAW_INSTALL_SH_NO_RUN=1 ... run_npm_global_install with a fake npm on PATH: printed Installing OpenClaw package, returned rc=0, and wrote the fake npm output to the log.
  • git merge-tree --write-tree origin/main HEAD: clean merge tree 8e4b28e76e02c3d80e084d1020910af08b8f128a; compared with origin/main, final merge result is scripts/install.sh | 1 +.
  • gh pr view 76355 --json statusCheckRollup: no non-green relevant checks; CI and Website Installer Sync checks are green or intentionally skipped.

Proof gap: I did not run a real global npm install locally; the contributor supplied non-interactive Linux install proof, and local proof verified this exact fallback emits the progress line without exercising global package mutation.

@steipete
steipete merged commit 1c9851e into openclaw:main May 30, 2026
92 of 93 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. scripts Repository scripts size: XS status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: No progress feedback during npm install in non-interactive (piped) mode

3 participants