feat(cli): add channel config status summary - #6044
Conversation
Signed-off-by: San Dang <sdang@nvidia.com>
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds rendered-config parsers and sandbox channel-status comparison signals, expands ChangesChannel Status Config Diagnostics & Bulk Reporting
Exec Command Wrapping and Recovery Test Decoding
Sequence Diagram(s)sequenceDiagram
participant showSandboxChannelStatus
participant buildConfigStatusSignals
participant getBuiltInRenderedConfigParser
participant execSandbox
showSandboxChannelStatus->>buildConfigStatusSignals: build channel diagnostics
buildConfigStatusSignals->>getBuiltInRenderedConfigParser: select parser by channel id
buildConfigStatusSignals->>execSandbox: read rendered config targets
execSandbox-->>buildConfigStatusSignals: target contents
buildConfigStatusSignals-->>showSandboxChannelStatus: DiagnosticSignal[]
Estimated code review effort🎯 5 (Critical) | ⏱️ ~90 minutes Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
🌿 Preview your docs: https://nvidia-preview-pr-6044.docs.buildwithfern.com/nemoclaw |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage in the Show a code coverage summary of the most covered files.
TypeScript / code-coverage/cliThe overall coverage in the Show a code coverage summary of the most covered files.
Updated |
PR Review Advisor — BlockedMerge posture: Do not merge until addressed Action checklist
Findings index
🚨 Required before mergeAddress these before merging unless a maintainer explicitly overrides the advisor with rationale.
|
E2E Advisor RecommendationRequired E2E: Dispatch hint: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
E2E Target RecommendationRequired E2E targets: Dispatch required E2E targets:
Full E2E target advisor summaryE2E Target AdvisorBase: Required E2E targets
Optional E2E targets
Relevant changed files
|
PR Review Advisor (Nemotron Ultra) — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
🚨 Required before mergeAddress these before merging unless a maintainer explicitly overrides the advisor with rationale.
|
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
docs/reference/commands.mdx (1)
1274-1278: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueSplit multi-sentence lines into one sentence per line.
Lines 1274 and 1278 each contain multiple sentences on a single line. Break each sentence onto its own line.
As per path instructions: "Keep one sentence per line in Markdown and MDX source files."
🤖 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 1274 - 1278, The command reference text in the status checks section contains multiple sentences on the same MDX line, which violates the one-sentence-per-line convention. Reformat the prose in the affected block so each sentence in the description of `--channel`, WhatsApp probing, and registered channel config comparisons appears on its own line, while keeping the existing wording and references to the status command behavior intact.Source: Path instructions
docs/reference/commands-nemohermes.mdx (1)
999-1003: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueSplit multi-sentence lines into one sentence per line.
Lines 999 and 1003 each contain multiple sentences on a single line. Break each sentence onto its own line.
As per path instructions: "Keep one sentence per line in Markdown and MDX source files."
🤖 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-nemohermes.mdx` around lines 999 - 1003, The prose in the command reference block uses multiple sentences on the same line, which violates the one-sentence-per-line MDX rule. Update the descriptive text in the command docs section so each sentence in the `commands-nemohermes` content is split onto its own line, keeping the wording the same while preserving the existing descriptions for `--channel`, WhatsApp probing, and registered-channel config comparisons.Source: Path instructions
🤖 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.
Inline comments:
In `@src/lib/messaging/channels/discord/rendered-config-parser.ts`:
- Around line 71-83: The mixed-value path in discordRequireMention is returning
the stringified projection keys instead of the original requireMention values,
so conflicting guild settings lose their true types. Update the
discordRequireMention function to dedupe by formatProjectionValue for
comparison, but build the returned array from the original
MessagingSerializableValue entries so booleans, numbers, and other values
preserve their types when requireMention differs across guilds.
---
Nitpick comments:
In `@docs/reference/commands-nemohermes.mdx`:
- Around line 999-1003: The prose in the command reference block uses multiple
sentences on the same line, which violates the one-sentence-per-line MDX rule.
Update the descriptive text in the command docs section so each sentence in the
`commands-nemohermes` content is split onto its own line, keeping the wording
the same while preserving the existing descriptions for `--channel`, WhatsApp
probing, and registered-channel config comparisons.
In `@docs/reference/commands.mdx`:
- Around line 1274-1278: The command reference text in the status checks section
contains multiple sentences on the same MDX line, which violates the
one-sentence-per-line convention. Reformat the prose in the affected block so
each sentence in the description of `--channel`, WhatsApp probing, and
registered channel config comparisons appears on its own line, while keeping the
existing wording and references to the status command behavior intact.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 87235fb3-87e4-4fbf-a1a7-4e53b9a8d1c9
📒 Files selected for processing (22)
docs/reference/commands-nemohermes.mdxdocs/reference/commands.mdxsrc/commands/sandbox/channels/status.tssrc/lib/actions/sandbox/channel-status-config.tssrc/lib/actions/sandbox/channel-status.test.tssrc/lib/actions/sandbox/channel-status.tssrc/lib/actions/sandbox/process-recovery.test.tssrc/lib/actions/sandbox/process-recovery.tssrc/lib/cli/public-display-defaults.tssrc/lib/messaging/channels/discord/rendered-config-parser.test.tssrc/lib/messaging/channels/discord/rendered-config-parser.tssrc/lib/messaging/channels/index.tssrc/lib/messaging/channels/manifests.test.tssrc/lib/messaging/channels/rendered-config-parser-utils.tssrc/lib/messaging/channels/rendered-config-parser.tssrc/lib/messaging/channels/slack/rendered-config-parser.tssrc/lib/messaging/channels/teams/rendered-config-parser.tssrc/lib/messaging/channels/telegram/rendered-config-parser.tssrc/lib/messaging/channels/wechat/rendered-config-parser.tssrc/lib/messaging/channels/whatsapp/rendered-config-parser.tstest/cli/connect-recovery-settle.test.tstest/cli/connect-recovery.test.ts
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
src/lib/actions/sandbox/channel-status-summary.test.ts (1)
7-90: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd an unknown-channel regression test.
This suite covers the new no-arg summary path, but it never exercises the explicit unknown-channel branch added in this PR. A public-boundary test for an invalid
channelvalue would lock down that the removed default fallback cannot silently route back into summary or WhatsApp probing. As per path instructions, "Tests must prove that public entrypoints reach the new path and that the old path is deleted or cannot execute."🤖 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/actions/sandbox/channel-status-summary.test.ts` around lines 7 - 90, Add a regression test in showSandboxChannelStatus that passes an explicit invalid channel value and asserts the unknown-channel branch is taken. Update the channel-status-summary.test suite using the public entrypoint and the existing makeDeps/showSandboxChannelStatus helpers to verify it does not fall back to the no-arg summary path or trigger WhatsApp probing. Ensure the new test checks the expected unknown-channel output/verdict so the removed default path cannot be reached.Source: Path instructions
🤖 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.
Inline comments:
In `@src/lib/actions/sandbox/channel-status-config-values.ts`:
- Around line 49-55: The boolean normalization helper currently only handles
booleans and strings, so numeric 0/1 values from structured config can still
compare as mismatches in configValuesEqual(). Update booleanConfigValue to also
accept numeric 0 and 1 and normalize them to false/true, alongside the existing
boolean-like string handling, so comparisons in channel-status-config-values.ts
treat these inputs consistently.
---
Nitpick comments:
In `@src/lib/actions/sandbox/channel-status-summary.test.ts`:
- Around line 7-90: Add a regression test in showSandboxChannelStatus that
passes an explicit invalid channel value and asserts the unknown-channel branch
is taken. Update the channel-status-summary.test suite using the public
entrypoint and the existing makeDeps/showSandboxChannelStatus helpers to verify
it does not fall back to the no-arg summary path or trigger WhatsApp probing.
Ensure the new test checks the expected unknown-channel output/verdict so the
removed default path cannot be reached.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 62fbd309-214f-41b1-b695-19716004a99b
📒 Files selected for processing (18)
docs/reference/commands-nemohermes.mdxdocs/reference/commands.mdxsrc/commands/sandbox/channels/status.tssrc/lib/actions/sandbox/channel-status-config-channels.test.tssrc/lib/actions/sandbox/channel-status-config-core.test.tssrc/lib/actions/sandbox/channel-status-config-values.test.tssrc/lib/actions/sandbox/channel-status-config-values.tssrc/lib/actions/sandbox/channel-status-config.tssrc/lib/actions/sandbox/channel-status-summary.test.tssrc/lib/actions/sandbox/channel-status-telegram-policy.test.tssrc/lib/actions/sandbox/channel-status.test-helpers.tssrc/lib/actions/sandbox/channel-status.test.tssrc/lib/actions/sandbox/channel-status.tssrc/lib/actions/sandbox/process-recovery.test.tssrc/lib/actions/sandbox/process-recovery.tssrc/lib/messaging/channels/discord/rendered-config-parser.test.tssrc/lib/messaging/channels/manifests.test.tssrc/lib/messaging/channels/wechat/rendered-config-parser.ts
✅ Files skipped from review due to trivial changes (4)
- src/commands/sandbox/channels/status.ts
- docs/reference/commands-nemohermes.mdx
- src/lib/actions/sandbox/channel-status-config-values.test.ts
- docs/reference/commands.mdx
🚧 Files skipped from review as they are similar to previous changes (5)
- src/lib/actions/sandbox/process-recovery.test.ts
- src/lib/messaging/channels/wechat/rendered-config-parser.ts
- src/lib/messaging/channels/manifests.test.ts
- src/lib/actions/sandbox/process-recovery.ts
- src/lib/actions/sandbox/channel-status.ts
Signed-off-by: San Dang <sdang@nvidia.com>
There was a problem hiding this comment.
🧹 Nitpick comments (1)
test/process-recovery.test.ts (1)
293-296: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAvoid pinning this test to the exact shell snippet.
These assertions lock the test to payload source text (
printf '%s\\n' ..., newline formatting) instead of the observable contract that the Hermes validator command is forwarded unwrapped and still executes through OpenShell. A small quoting or wrapper refactor would break the test without changing behavior.As per path instructions,
**/*.test.{ts,js,mts,mjs,cts,cjs}tests should "Prefer observable outcomes through the public boundary over source-text" and should flag "implementation lock-in."🤖 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 `@test/process-recovery.test.ts` around lines 293 - 296, The test is too tightly coupled to the exact shell payload text, so update the assertions in process-recovery.test to verify the observable contract instead of source formatting. In the shellPayload checks, keep validating that the Hermes validator command is forwarded and that OpenShell is used, but remove assertions that pin the payload to specific newline/printf syntax or exact wrapper text; use higher-level expectations around the command path and execution behavior so refactors in shell quoting do not break the test.Source: Path instructions
🤖 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 `@test/process-recovery.test.ts`:
- Around line 293-296: The test is too tightly coupled to the exact shell
payload text, so update the assertions in process-recovery.test to verify the
observable contract instead of source formatting. In the shellPayload checks,
keep validating that the Hermes validator command is forwarded and that
OpenShell is used, but remove assertions that pin the payload to specific
newline/printf syntax or exact wrapper text; use higher-level expectations
around the command path and execution behavior so refactors in shell quoting do
not break the test.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 73198d20-4b41-4d5f-bf0f-f40d764dc84d
📒 Files selected for processing (1)
test/process-recovery.test.ts
Signed-off-by: San Dang <sdang@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 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.
Inline comments:
In `@src/lib/actions/sandbox/channel-status-config.ts`:
- Around line 112-119: The severity logic in the channel status summary is
treating missing rendered values as info because `compareConfigSource()` leaves
absent parsed values unchecked. Update the `channel-status-config` status
calculation so the summary in this branch also warns when `expected.hasValue` is
true but not all configured sources are represented in `comparisons`, using the
existing `checkedComparisons`/`allSourcesChecked` logic in the returned object
to surface that drift instead of downgrading it to info.
In `@test/process-recovery.test.ts`:
- Around line 293-295: The test is overfitting to the current argv framing in
shell execution instead of verifying the newline-safe contract. Update the
assertions in the recovery test around the command builder/execution path so
they focus on observable behavior at the public boundary: the payload must
remain newline-safe and must not contain raw multi-line shell content or the
unsafe decode-and-execute pattern. Keep the check anchored to the relevant test
helpers/flows that produce shellPayload rather than asserting the exact fixed
sandbox exec prefix.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: ea9acbfd-ad85-4bfb-8a65-a1d93081a1d4
📒 Files selected for processing (9)
src/lib/actions/sandbox/channel-status-config-channels.test.tssrc/lib/actions/sandbox/channel-status-config-core.test.tssrc/lib/actions/sandbox/channel-status-config-values.test.tssrc/lib/actions/sandbox/channel-status-config-values.tssrc/lib/actions/sandbox/channel-status-config.tssrc/lib/actions/sandbox/channel-status-summary.test.tssrc/lib/actions/sandbox/channel-status-telegram-policy.test.tssrc/lib/messaging/channels/telegram/rendered-config-parser.tstest/process-recovery.test.ts
💤 Files with no reviewable changes (1)
- src/lib/messaging/channels/telegram/rendered-config-parser.ts
🚧 Files skipped from review as they are similar to previous changes (5)
- src/lib/actions/sandbox/channel-status-telegram-policy.test.ts
- src/lib/actions/sandbox/channel-status-config-values.test.ts
- src/lib/actions/sandbox/channel-status-config-values.ts
- src/lib/actions/sandbox/channel-status-config-channels.test.ts
- src/lib/actions/sandbox/channel-status-config-core.test.ts
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
|
Maintainer rationale for PR Review Advisor (Nemotron Ultra) required items on current head
Conclusion: no further code changes are required for these four required advisor items on the latest head. |
Vitest E2E Target Results — ✅ All selected jobs passedRun: 28437574000
|
prekshivyas
left a comment
There was a problem hiding this comment.
Status summary logic is safe — secrets filtered at the manifest input level, 64 KB read cap, path-traversal coverage. CodeRabbit finding is a diagnostic accuracy gap, not a safety issue. LGTM.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Prek Shiv <prekshiv@nvidia.com>
…and test budget Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Prek Shiv <prekshiv@nvidia.com>
…atisfy file budget Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Prek Shiv <prekshiv@nvidia.com>
…com/NVIDIA/NemoClaw into feat/channels-status-config-summary
…gn, update tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Prek Shiv <prekshiv@nvidia.com>
…s-config-summary # Conflicts: # src/lib/actions/sandbox/process-recovery.test.ts # src/lib/agent/hermes-recovery-boundary.ts # test/cli/connect-recovery.test.ts # test/process-recovery.test.ts
## Summary - Add the `v0.0.72` release-note section with links to the deeper docs pages for installer recovery, command diagnostics, inference, policy, and sandbox repair changes. - Document the custom preset `allowed_ips` guard for user-authored policy files. ## Related Issue None. ## Source summary - #6132 -> `docs/about/release-notes.mdx`: Summarizes installer and upgrade recovery before generic onboarding, with links to quickstart and lifecycle docs. - #6087 -> `docs/network-policy/customize-network-policy.mdx`: Documents that user-authored custom presets reject `allowed_ips` for ordinary endpoints; also summarized in release notes. - #5975 -> `docs/about/release-notes.mdx`: Summarizes safer curl-based inference probes that keep API keys out of process arguments. - #6044 -> `docs/about/release-notes.mdx`: Summarizes compact `channels status` configuration reporting. - #6096 -> `docs/about/release-notes.mdx`: Summarizes OpenClaw EC2 metadata discovery disablement and links to security guidance. - #5980 and #5991 -> `docs/about/release-notes.mdx`: Summarizes `exec` multiline argument rejection and recovery guidance. - #6023 -> `docs/about/release-notes.mdx`: Summarizes registered-provider diagnostics for `inference set` failures. - #6074 -> `docs/about/release-notes.mdx`: Summarizes the refreshed NVIDIA Endpoints featured-model selection behavior. - #5969 -> `docs/about/release-notes.mdx`: Summarizes `credentials add` provider credential registration. - #6060 -> `docs/about/release-notes.mdx`: Summarizes mutable OpenClaw config permission restoration after `exec`. - #6134 -> `docs/about/release-notes.mdx`: Summarizes restored Tavily access for managed Python workflows. - #6089 -> `docs/about/release-notes.mdx`: Summarizes Hermes runtime version-scheme comparison during upgrade checks. - #6131 -> `docs/about/release-notes.mdx`: Summarizes OpenClaw gateway watchdog recovery behavior. - #5976 and #5990 -> `docs/about/release-notes.mdx`: Summarizes prompt stdin EOF cancellation behavior during onboarding. - #5540 -> `docs/about/release-notes.mdx`: Summarizes clarified host-level and per-sandbox status command scope. - #5978 and #6018 -> `docs/about/release-notes.mdx`: Summarizes policy-denial log breadcrumbs in connect shells. ## Testing - `npm run docs:sync-agent-variants` - `npm run docs` - Commit hooks passed during `git commit`, including commitlint and gitleaks. - Pre-push hook passed during `git push`, including TypeScript CLI and package/tag version sync. ## Checklist - [x] Documentation updated. - [x] `npm run docs` completed with 0 errors and 1 existing Fern warning. - [x] No source code or generated build artifacts committed. Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added release notes for v0.0.72 covering improved installer recovery, clearer CLI diagnostics, safer inference setup and provider switching, better credential handling, stronger policy boundaries, and more robust runtime repair behavior. * Updated network policy guidance to clarify when `allowed_ips` can be used, including a specific exception for the sandbox-to-host bridge endpoint. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
<!-- markdownlint-disable MD041 --> ## Summary Adds a manifest-backed `channels status` configuration summary that compares sandbox registry inputs against the rendered OpenClaw/Hermes channel config. This replaces the narrower Telegram-only approach in NVIDIA#5705 with per-channel parsers for rendered config sources and keeps `doctor` unchanged. ``` ➜ NemoClaw git:(feat/channels-status-config-values) ✗ nemoclaw tm channels status NemoClaw channels status: tm / telegram [ok] Channel registration: telegram registered [ok] Policy coverage: telegram preset applied [ok] Telegram User ID (for DM access) (TELEGRAM_ALLOWED_IDS): 7895072570 [ok] Telegram group policy (TELEGRAM_GROUP_POLICY): open [info] Deep diagnostics: not implemented for telegram; see `nemoclaw tm doctor` and `nemoclaw tm logs --follow` ``` ## Related Issue Fixes NVIDIA#5695. Supersedes NVIDIA#5705 and NVIDIA#6033. ## Changes - Add a central rendered-config parser registry plus per-channel parsers for Telegram, Teams, Slack, Discord, WeChat, and WhatsApp. - Split rendered-config status comparison into a dedicated channel status config module. - Show configured, non-secret channel values as `Label (ENV_KEY): value` and mark mismatches against rendered agent config as warnings. - Make no-arg `channels status` print a compact summary for configured channels instead of silently defaulting to one channel. - Keep WhatsApp on its existing deep diagnostics path and keep `doctor` behavior unchanged. - Make sandbox exec wrapping newline-safe while keeping single-line commands readable for existing recovery/fallback behavior. - Update generated command reference docs for the channel status help text. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates <!-- Check all that apply. For any "covered by existing tests", "not applicable", or waiver entry, add a brief justification on the same line or in the Changes section. --> - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: scoped to read-only channel status rendering plus the sandbox exec newline wrapper; no credential values are persisted or newly exposed beyond existing non-secret status visibility. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each item you ran and confirmed. Leave unchecked items you skipped. Doc-only changes do not require npm test unless you ran it. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [ ] Git hooks passed during commit and push, or `npx prek run --from-ref main --to-ref HEAD` passes - [x] Targeted tests pass for changed behavior - [ ] Full `npm test` passes (broad runtime changes only) - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) Verification notes: - Passed: `npx vitest run --project cli src/lib/actions/sandbox/channel-status.test.ts src/lib/messaging/channels/discord/rendered-config-parser.test.ts src/lib/messaging/channels/manifests.test.ts src/lib/actions/sandbox/process-recovery.test.ts` - Passed: `npx vitest run --project integration test/process-recovery.test.ts test/cli/connect-recovery.test.ts test/cli/connect-recovery-settle.test.ts` - Passed: `npx vitest run --project cli src/lib/actions/sandbox/auto-pair-approval.test.ts` - Passed: `npx vitest run --project integration test/sandbox-connect-inference/auto-pair-approval.test.ts` - Passed: `npm run typecheck:cli` - Passed: `npm run build:cli` - Passed: `npm run test-conditionals:scan -- --top 25` - Passed: targeted `npx biome check` on modified source/test files - `npm run docs` completed with 0 errors and 2 existing warnings. - `npx prek run --from-ref main --to-ref HEAD` did not pass locally; remaining failures were unrelated local broad-lane issues (`langchain-deepagents-code-image` `${1^^}` under `sh`, sandbox rlimit expectations, and two CLI timeout flakes that passed isolated as listed above). --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: San Dang <sdang@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * `channels status` now shows a compact status summary for all configured messaging channels by default, with detailed diagnostics when `--channel` is specified. * Status reporting includes messaging policy coverage and non-secret rendered-config comparisons; WhatsApp detailed output expands runtime probing (QR/session, Noise connectivity, inbound delivery) plus policy coverage. * **Bug Fixes** * Providing an unknown `--channel` now returns a clear “unknown channel” error and exits non-zero. * WhatsApp detailed checks now correctly yield a non-zero verdict for the idle (no inbound delivery observed) case. * **Documentation** * Updated command help and reference docs to clarify compact vs detailed output, `--channel`/`--json` behavior, and WhatsApp probe scope. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: San Dang <sdang@nvidia.com> Signed-off-by: Prek Shiv <prekshiv@nvidia.com> Co-authored-by: Prekshi Vyas <prekshiv@nvidia.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Prekshi Vyas <34834085+prekshivyas@users.noreply.github.com>
## Summary - Add the `v0.0.72` release-note section with links to the deeper docs pages for installer recovery, command diagnostics, inference, policy, and sandbox repair changes. - Document the custom preset `allowed_ips` guard for user-authored policy files. ## Related Issue None. ## Source summary - NVIDIA#6132 -> `docs/about/release-notes.mdx`: Summarizes installer and upgrade recovery before generic onboarding, with links to quickstart and lifecycle docs. - NVIDIA#6087 -> `docs/network-policy/customize-network-policy.mdx`: Documents that user-authored custom presets reject `allowed_ips` for ordinary endpoints; also summarized in release notes. - NVIDIA#5975 -> `docs/about/release-notes.mdx`: Summarizes safer curl-based inference probes that keep API keys out of process arguments. - NVIDIA#6044 -> `docs/about/release-notes.mdx`: Summarizes compact `channels status` configuration reporting. - NVIDIA#6096 -> `docs/about/release-notes.mdx`: Summarizes OpenClaw EC2 metadata discovery disablement and links to security guidance. - NVIDIA#5980 and NVIDIA#5991 -> `docs/about/release-notes.mdx`: Summarizes `exec` multiline argument rejection and recovery guidance. - NVIDIA#6023 -> `docs/about/release-notes.mdx`: Summarizes registered-provider diagnostics for `inference set` failures. - NVIDIA#6074 -> `docs/about/release-notes.mdx`: Summarizes the refreshed NVIDIA Endpoints featured-model selection behavior. - NVIDIA#5969 -> `docs/about/release-notes.mdx`: Summarizes `credentials add` provider credential registration. - NVIDIA#6060 -> `docs/about/release-notes.mdx`: Summarizes mutable OpenClaw config permission restoration after `exec`. - NVIDIA#6134 -> `docs/about/release-notes.mdx`: Summarizes restored Tavily access for managed Python workflows. - NVIDIA#6089 -> `docs/about/release-notes.mdx`: Summarizes Hermes runtime version-scheme comparison during upgrade checks. - NVIDIA#6131 -> `docs/about/release-notes.mdx`: Summarizes OpenClaw gateway watchdog recovery behavior. - NVIDIA#5976 and NVIDIA#5990 -> `docs/about/release-notes.mdx`: Summarizes prompt stdin EOF cancellation behavior during onboarding. - NVIDIA#5540 -> `docs/about/release-notes.mdx`: Summarizes clarified host-level and per-sandbox status command scope. - NVIDIA#5978 and NVIDIA#6018 -> `docs/about/release-notes.mdx`: Summarizes policy-denial log breadcrumbs in connect shells. ## Testing - `npm run docs:sync-agent-variants` - `npm run docs` - Commit hooks passed during `git commit`, including commitlint and gitleaks. - Pre-push hook passed during `git push`, including TypeScript CLI and package/tag version sync. ## Checklist - [x] Documentation updated. - [x] `npm run docs` completed with 0 errors and 1 existing Fern warning. - [x] No source code or generated build artifacts committed. Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added release notes for v0.0.72 covering improved installer recovery, clearer CLI diagnostics, safer inference setup and provider switching, better credential handling, stronger policy boundaries, and more robust runtime repair behavior. * Updated network policy guidance to clarify when `allowed_ips` can be used, including a specific exception for the sandbox-to-host bridge endpoint. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Summary
Adds a manifest-backed
channels statusconfiguration summary that compares sandbox registry inputs against the rendered OpenClaw/Hermes channel config. This replaces the narrower Telegram-only approach in #5705 with per-channel parsers for rendered config sources and keepsdoctorunchanged.Related Issue
Fixes #5695.
Fixes #5691
Supersedes #5705 and #6033.
Changes
Label (ENV_KEY): valueand mark mismatches against rendered agent config as warnings.channels statusprint a compact summary for configured channels instead of silently defaulting to one channel.doctorbehavior unchanged.Type of Change
Quality Gates
Verification
Verifiedin GitHubnpx prek run --from-ref main --to-ref HEADpassesnpm testpasses (broad runtime changes only)npm run docsbuilds without warnings (doc changes only)Verification notes:
npx vitest run --project cli src/lib/actions/sandbox/channel-status.test.ts src/lib/messaging/channels/discord/rendered-config-parser.test.ts src/lib/messaging/channels/manifests.test.ts src/lib/actions/sandbox/process-recovery.test.tsnpx vitest run --project integration test/process-recovery.test.ts test/cli/connect-recovery.test.ts test/cli/connect-recovery-settle.test.tsnpx vitest run --project cli src/lib/actions/sandbox/auto-pair-approval.test.tsnpx vitest run --project integration test/sandbox-connect-inference/auto-pair-approval.test.tsnpm run typecheck:clinpm run build:clinpm run test-conditionals:scan -- --top 25npx biome checkon modified source/test filesnpm run docscompleted with 0 errors and 2 existing warnings.npx prek run --from-ref main --to-ref HEADdid not pass locally; remaining failures were unrelated local broad-lane issues (langchain-deepagents-code-image${1^^}undersh, sandbox rlimit expectations, and two CLI timeout flakes that passed isolated as listed above).Signed-off-by: San Dang sdang@nvidia.com
Summary by CodeRabbit
channels statusnow shows a compact status summary for all configured messaging channels by default, with detailed diagnostics when--channelis specified.--channelnow returns a clear “unknown channel” error and exits non-zero.--channel/--jsonbehavior, and WhatsApp probe scope.