fix(cli): add tunnel status command#4320
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (1)
✅ Files skipped from review due to trivial changes (1)
📝 WalkthroughWalkthroughAdds a parent ChangesTunnel Feature Implementation
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/lib/cli/command-registry.test.ts (1)
20-23: ⚡ Quick winUse semantic identity for partition uniqueness, not object identity.
new Set(partitioned).sizeonly checks object references. If command objects are cloned, this can pass while semantic duplicates slip through. Compare stable identifiers instead.Suggested diff
- expect(new Set(partitioned).size).toBe(COMMANDS.length); + expect(new Set(partitioned.map((cmd) => cmd.commandId)).size).toBe(COMMANDS.length); + expect(new Set(partitioned.map((cmd) => cmd.commandId))).toEqual( + new Set(COMMANDS.map((cmd) => cmd.commandId)), + );🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/lib/cli/command-registry.test.ts` around lines 20 - 23, The test "partitions commands into global and sandbox scopes" uses object identity to check uniqueness; change it to assert uniqueness based on a stable semantic identifier (e.g., command.id or command.name) instead of object references: construct the partitioned list from globalCommands() and sandboxCommands(), then build a Set from the chosen identifier for each command and compare its size to COMMANDS.length so cloned objects with the same identifier are detected; update references to partitioned, globalCommands(), sandboxCommands(), and COMMANDS accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@src/lib/cli/command-registry.test.ts`:
- Around line 20-23: The test "partitions commands into global and sandbox
scopes" uses object identity to check uniqueness; change it to assert uniqueness
based on a stable semantic identifier (e.g., command.id or command.name) instead
of object references: construct the partitioned list from globalCommands() and
sandboxCommands(), then build a Set from the chosen identifier for each command
and compare its size to COMMANDS.length so cloned objects with the same
identifier are detected; update references to partitioned, globalCommands(),
sandboxCommands(), and COMMANDS accordingly.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: eec44c59-97c4-48ae-851d-3ae1a5f1daef
📒 Files selected for processing (5)
src/commands/tunnel.tssrc/commands/tunnel/status.tssrc/lib/cli/command-registry.test.tssrc/lib/cli/public-display-defaults.tstest/cli.test.ts
Signed-off-by: Tian Zhang <tiaz-hh@users.noreply.github.com>
2395b1c to
a345e27
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (1)
docs/reference/commands.mdx (1)
1026-1027: ⚡ Quick winDescribe the public URL output when cloudflared is running.
The documentation states that the output reports the cloudflared state (running/stopped/stale) and recovery hints, but omits that when cloudflared is running, the command also displays the public tunnel URL. According to the implementation (src/lib/tunnel/services.ts:423-428), when cloudflared is in the "running" state, the command prints the Public URL.
Consider adding a sentence mentioning that the public tunnel URL is displayed when cloudflared is running.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/reference/commands.mdx` around lines 1026 - 1027, Update the docs/reference/commands.mdx description for the cloudflared public-URL tunnel status to explicitly state that when cloudflared is in the "running" state the command also displays the public tunnel URL (matching the behavior implemented in src/lib/tunnel/services.ts around the public URL printing logic). Add a short sentence after the existing state/recovery hint description that the command prints the public tunnel URL when cloudflared is running.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@docs/reference/commands.mdx`:
- Around line 1026-1027: Update the docs/reference/commands.mdx description for
the cloudflared public-URL tunnel status to explicitly state that when
cloudflared is in the "running" state the command also displays the public
tunnel URL (matching the behavior implemented in src/lib/tunnel/services.ts
around the public URL printing logic). Add a short sentence after the existing
state/recovery hint description that the command prints the public tunnel URL
when cloudflared is running.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 708f8742-f85d-4050-99b7-d0c2a72cf865
📒 Files selected for processing (6)
docs/reference/commands.mdxsrc/commands/tunnel.tssrc/commands/tunnel/status.tssrc/lib/cli/command-registry.test.tssrc/lib/cli/public-display-defaults.tstest/cli.test.ts
🚧 Files skipped from review as they are similar to previous changes (5)
- src/commands/tunnel/status.ts
- src/commands/tunnel.ts
- src/lib/cli/public-display-defaults.ts
- src/lib/cli/command-registry.test.ts
- test/cli.test.ts
# Conflicts: # docs/reference/commands.mdx # src/commands/tunnel.ts # src/lib/cli/command-registry.test.ts # test/cli.test.ts
## Summary - Adds the `v0.0.60` section to `docs/about/release-notes.mdx` using the dev announcement from discussion #4877. - Fills the source-doc gaps found during release-prep review across inference, policy tiers, command behavior, security boundaries, Hermes dashboard/tooling, runtime context, and troubleshooting. - Refreshes generated agent skills under `.agents/skills/` from the current Fern docs output and upgrades Fern from `5.44.3` to `5.45.0`. ## Source summary - #4037 -> `docs/reference/architecture.mdx`, `docs/about/how-it-works.mdx`, `docs/about/release-notes.mdx`: Documents system-only runtime context that stays out of visible chat. - #4875 -> `docs/reference/architecture.mdx`, `docs/about/how-it-works.mdx`, `docs/about/release-notes.mdx`: Documents try-first sandbox network/filesystem guidance and clearer failure classification. - #4788 -> `docs/security/best-practices.mdx`, `docs/about/release-notes.mdx`: Documents shared OpenClaw device-approval policy for startup and connect. - #4768 -> `docs/reference/network-policies.mdx`, `docs/network-policy/integration-policy-examples.mdx`, `docs/get-started/quickstart.mdx`, `docs/get-started/quickstart-hermes.mdx`, `docs/reference/commands.mdx`: Documents `weather`, `public-reference`, and Hermes managed-tool gateway preset behavior. - #3788 and #4864 -> `docs/reference/network-policies.mdx`, `docs/reference/commands.mdx`: Documents non-interactive policy-tier fail-fast behavior and interactive prompt fallback. - #4756 and #4866 -> `docs/reference/commands.mdx`: Documents env-aware default sandbox resolution for `list`, `status`, and `tunnel` commands. - #4320 -> `docs/reference/commands.mdx`: Documents `$$nemoclaw tunnel status` behavior. - #4328 -> `docs/reference/commands.mdx`: Documents line-scoped policy preset descriptions in `policy-list`. - #4580 and #4748 -> `docs/reference/architecture.mdx`: Documents package-managed OpenShell gateway service and Docker-driver gateway-marker behavior. - #4598 -> `docs/manage-sandboxes/lifecycle.mdx`: Documents concurrent gateway/dashboard cleanup isolation by sandbox name and port. - #4777 -> `docs/reference/troubleshooting.mdx`: Documents Docker GPU patch rollback behavior. - #4610 -> `docs/reference/troubleshooting.mdx`, `docs/reference/commands.mdx`: Keeps mutable OpenClaw config permission guidance aligned and removes skipped experimental wording. - #4868 -> `docs/reference/commands.mdx`: Keeps `.dockerignore` handling for custom `onboard --from <Dockerfile>` contexts in generated skills. - #4870 -> `docs/reference/commands.mdx`, `docs/manage-sandboxes/runtime-controls.mdx`: Documents `NEMOCLAW_MINIMAL_BOOTSTRAP` and generated skill coverage. - #4641 -> `docs/inference/inference-options.mdx`, `docs/reference/troubleshooting.mdx`: Documents local NVIDIA NIM platform-digest pulls and served-model id adoption. - #4810 and #4867 -> `docs/inference/inference-options.mdx`: Documents stable NGC managed-vLLM image lineage and DGX Station DeepSeek V4 Flash coverage. - #4852 -> `docs/inference/use-local-inference.mdx`, `docs/reference/troubleshooting.mdx`: Documents Ollama model fit filtering, 16K context floor, cold-load retry, and failed-model exclusion. - #4847 -> `docs/inference/switch-inference-providers.mdx`: Documents API-family sync, Hermes `api_mode`, and Bedrock Runtime exception. - #4800 -> `docs/inference/tool-calling-reliability.mdx`: Documents Nemotron managed-inference native tool-search fallback. - #4333 -> `docs/inference/switch-inference-providers.mdx`: Documents interactive multimodal input prompting. - #4086 -> `docs/reference/troubleshooting.mdx`: Keeps proxy bypass normalization in generated troubleshooting coverage. - #4811 and #4855 -> `docs/get-started/quickstart-hermes.mdx`: Documents prebuilt Hermes dashboard assets and TUI recovery without runtime rebuilds. - #4854 -> `docs/inference/switch-inference-providers.mdx`, `docs/reference/commands.mdx`: Documents Hermes proxy API-key placeholder preservation during inference switches. - #4248 -> `docs/manage-sandboxes/messaging-channels.mdx`, `.agents/skills/`: Keeps messaging enrollment behavior aligned with manifest-hook implementation. - #4771 -> `docs/security/best-practices.mdx`, `docs/security/credential-storage.mdx`: Documents Hermes placeholder-only secret boundary for sandbox-visible runtime files. - #4787 -> `docs/security/best-practices.mdx`, `docs/about/release-notes.mdx`: Documents expanded memory scanner examples for OpenAI project keys and Slack app-level tokens. - #4848 -> `docs/reference/commands.mdx`: Documents OpenClaw skill install mirroring into the agent home directory. - #4790 -> `docs/about/release-notes.mdx`: Uses the prior release-prep structure and generated `.agents/skills/` refresh as the template for this release. ## Verification - `python3 scripts/docs-to-skills.py docs/ .agents/skills/ --prefix nemoclaw-user --doc-platform fern-mdx` - `python3 scripts/docs-to-skills.py docs/ .agents/skills/ skills/ --prefix nemoclaw-user --doc-platform fern-mdx --dry-run` - `npm run docs` - `git diff --check` - skip-term scan across `docs/`, `.agents/skills/`, and `skills/` - `npm run build:cli` - `npm run typecheck:cli` - Commit and pre-push hook suites, including markdownlint, gitleaks, env-var docs gate, docs-to-skills verification, and skills YAML tests <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes * **New Features** * DeepSeek-V4-Flash now available as default inference model for DGX Station. * Hermes dashboard improved with dedicated port and OAuth-authenticated tool gateway selection. * Added weather and public-reference policy presets for expanded agent capabilities. * Enhanced Ollama model selection with GPU memory filtering and automatic retry for timeouts. * **Bug Fixes** * Improved policy tier validation to prevent invalid configurations. * Better sandbox cleanup scoping by port to prevent conflicts across deployments. * Added GPU patch failure recovery with automatic rollback. * **Documentation** * Expanded troubleshooting guides for inference, security, and sandbox lifecycle. * Added .dockerignore best practices for custom deployments. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Summary
Fixes the remaining reproducible parts of #4302. Current main already lists
nemoclaw tunnel startandnemoclaw tunnel stopin top-level help; this PR adds the missing tunnel namespace help andtunnel statuscommand.Related Issue
Fixes #4302
Changes
nemoclaw tunnel --helpso the tunnel command namespace is discoverable.nemoclaw tunnel statusto show the current cloudflared tunnel state.nemoclaw tunnel statusin top-level Services help.Type of Change
Verification
npx prek run --all-filespassesnpm testpassesnpm run docsbuilds without warnings (doc changes only)Additional validation run:
Manual validation on DGX Spark:
Observed:
Signed-off-by: Tian Zhang tiazhang@nvidia.com
Summary by CodeRabbit
New Features
tunnelcommand with subcommands to manage Cloudflare public-URL tunnels.tunnel statussubcommand to show cloudflared tunnel status.tunnel statusappears in command listings under Services.Documentation
tunnel statusbehavior and example usage.Tests
tunnelandtunnel status; updated command-listing tests to validate content-based behavior.