Repository navigation
fix(help): honor NO_HYPERLINKS in root-help header (#63) - #71
Conversation
The header hyperlink gate defaulted to raw `out.isTTY`, so `NO_HYPERLINKS`/`FORCE_HYPERLINKS` and the `--no-hyperlinks`/`--hyperlinks` flags were ignored. Resolve OSC 8 support on the output channel as a new `out.isHyperlinkSupported` property (explicit `hyperlinks` option, then the env/argv overrides, then `isTTY`) and gate the header on it. Bump to 3.0.0-rc.12.
commit: |
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 19 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Repository YAML (base), Organization UI (inherited) Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (3)
📝 WalkthroughWalkthroughThe release updates package versions to Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant EnvironmentAndArgv
participant OutputChannel
participant CLIBuilder
participant RootHelp
EnvironmentAndArgv->>OutputChannel: resolve OSC 8 support
OutputChannel->>CLIBuilder: provide isHyperlinkSupported
CLIBuilder->>RootHelp: configure help hyperlinks
RootHelp-->>CLIBuilder: render or suppress header links
Possibly related issues
Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 9 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (9 passed)
📋 Issue PlannerBuilt with CodeRabbit's Coding Plans for faster development and fewer bugs. View plan used: Comment |
… access CodeRabbit flagged direct `globalThis.process` reads in the output layer, which violates the "no process.* in src/core" rule and can throw under Deno's permission model. Move the NO_HYPERLINKS/FORCE_HYPERLINKS (and argv-flag) decision into a pure `resolveHyperlinkOverride(env, argv)` helper; the CLI layer feeds it the adapter's env/argv and passes the result to the output channel as the `hyperlinks` option. The channel now only resolves `hyperlinks ?? isTTY`, staying process-free.
|
@coderabbitai full review Addressed the process-access finding: the |
|
✅ Action performedFull review finished. |
|
✅ Action performedFull review finished. You're currently rate limited under our Fair Usage Limits Policy. Your recent PR review activity is in the 95th percentile or higher among CodeRabbit users, so adaptive limits apply. Your next review will be available in 23 minutes. |
Per CodeRabbit review: `resolveHyperlinkOverride` matched `--no-hyperlinks`/ `--hyperlinks` anywhere in argv, so a positional after `--` (e.g. `mycli deploy -- --no-hyperlinks`) wrongly toggled the header gate. Only consider tokens before the separator. Add helper coverage for the post-`--` case and an e2e test for the `--hyperlinks` force-on-without-TTY path.
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
dreamcli | 8b41c6b | Commit Preview URL Branch Preview URL |
Jul 20 2026, 01:49 AM |
Closes #63.
Problem
The root-help header hyperlink gate defaulted to raw
out.isTTY:So
NO_HYPERLINKS=1 <cli> --helpstill emitted OSC 8 links in the header. ansispeck resolves hyperlink support while honoringNO_HYPERLINKS/FORCE_HYPERLINKSand--no-hyperlinks/--hyperlinks, but the help gate never consulted that path.Fix
The output channel now resolves a new
isHyperlinkSupportedproperty, mirroring howcoloris resolved:hyperlinksoutput option wins,NO_HYPERLINKS/FORCE_HYPERLINKSand the--no-hyperlinks/--hyperlinksargv flags,isTTY.The env/argv override reads the same signals ansispeck does, but leaves the TTY fallback to the channel so an explicitly-configured
isTTY(e.g..execute({ isTTY: true })) still applies. The header gate consultsout.isHyperlinkSupportedinstead ofout.isTTY.out.isHyperlinkSupportedis also exposed on the publicOutinterface for consumers rendering their ownout.color.link(...)output.Tests
output.test.ts— resolution matrix: TTY fallback, explicit option override,NO_HYPERLINKS/FORCE_HYPERLINKS, and explicit-option-beats-env.cli-links.test.ts— end-to-end:NO_HYPERLINKSsuppresses header links on a TTY;FORCE_HYPERLINKSemits them without one.Full typecheck, biome, dprint, and the output/cli/schema suites (919 tests) pass.
Bumps to
3.0.0-rc.12.