feat(cli): add channel config status summary - #6033
Conversation
Signed-off-by: San Dang <sdang@nvidia.com>
📝 WalkthroughWalkthroughThe PR adds rendered-config parsers for messaging channels, expands ChangesRendered config, channel status, and exec wrapping
Sequence Diagram(s)sequenceDiagram
participant ChannelStatus as buildConfigStatusSignals
participant Sandbox as execSandbox
participant Parser as RenderedChannelConfigParser
participant Renderer as compareConfigSource
ChannelStatus->>Parser: listConfigVisibilityKeys(context)
ChannelStatus->>Sandbox: cat resolved config targets
Sandbox-->>ChannelStatus: file contents
ChannelStatus->>Renderer: compare expected vs rendered values
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120 minutes 🚥 Pre-merge checks | ✅ 2 | ❌ 3❌ Failed checks (2 warnings, 1 inconclusive)
✅ Passed checks (2 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
|
🌿 Preview your docs: https://nvidia-preview-pr-6033.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 |
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 — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
Review findings by urgency: 0 required fixes, 7 items to resolve/justify, 0 in-scope improvements
|
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (2)
src/lib/actions/sandbox/channel-status.ts (2)
874-982: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy liftRendered-config parsing/comparison logic is placed in the actions layer.
parseEnvLines,unquoteEnvValue,parseRenderedConfigSource,compareConfigSource,configValuesEqual,listConfigValues,booleanConfigValue, andformatConfigValueare pure rendered-config parsing/comparison primitives. Per the layer ownership for this cohort, this logic belongs undersrc/lib/messaging/**(side-effect free), leavingchannel-status.tsto orchestrate. Consider relocating these to the messaging package (e.g., alongside the per-channel parser utilities) and importing them here.As per path instructions: "ensure the new 'channels status' orchestration stays in
src/lib/actions/sandbox/**, while the 'rendered config' parsing/comparison logic stays insrc/lib/messaging/**and remains side-effect free."🤖 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.ts` around lines 874 - 982, The rendered-config parsing and comparison helpers are currently living in the actions layer, but they should be moved into the side-effect-free messaging layer. Relocate parseEnvLines, unquoteEnvValue, parseRenderedConfigSource, compareConfigSource, configValuesEqual, listConfigValues, booleanConfigValue, and any related config formatting helper such as formatConfigValue into src/lib/messaging/**, keeping channel-status.ts focused on orchestration only. Then update channel-status.ts to import and use those helpers from their new messaging location, preserving existing behavior while aligning with the layer ownership rules.Source: Path instructions
829-848: 🚀 Performance & Scalability | 🔵 Trivial | ⚖️ Poor tradeoffAll-channels mode re-reads the same config file per channel.
In the no-
--channelpath,buildBasicChannelReportinvokesbuildConfigStatusSignalsfor every enabled channel, andreadConfigSourceValuesdedupes targets only within a single channel. Channels that share the same rendered target (e.g.openclaw.json) each trigger a separatecatsandbox exec, each bounded byCONFIG_STATUS_TIMEOUT_MS(5s). With several configured channels this multiplies sandbox round-trips for the same file on a common command. Consider a per-invocation read cache keyed by resolved target so each file is read at most once.🤖 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.ts` around lines 829 - 848, The all-channels path is repeatedly reading the same rendered config target across channels, causing duplicate sandbox calls and avoidable timeout overhead. Add a per-invocation cache in the channel-status flow so shared reads are reused across calls, using the resolved target as the key; update readConfigSourceValues and the buildBasicChannelReport/buildConfigStatusSignals path to consult that cache before calling deps.execSandbox. Keep the existing per-source dedupe, but ensure each target is read at most once for the entire status run.
🤖 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 discordRequireMention helper currently returns an empty
array-like rendered value when no guild has requireMention configured, which
causes channel-status to treat it as a mismatch instead of unset. Update
discordRequireMention to return undefined when the filtered values list is
empty, while keeping the existing unique-value handling for populated cases so
it matches discordGuildUsers behavior.
In `@src/lib/messaging/channels/rendered-config-parser.ts`:
- Around line 14-26: The rendered-config parser lookup is using a separate
hand-maintained channel map, which can drift from the manifest-backed channel
registry. Update getBuiltInRenderedConfigParser and the
BUILT_IN_RENDERED_CONFIG_PARSERS logic so it derives the parser from the
manifest registry or is attached to the manifest definition itself, ensuring
channel-status uses one authoritative source for channel support and
diagnostics.
In `@src/lib/messaging/channels/telegram/rendered-config-parser.ts`:
- Around line 32-39: Hermes’ Telegram config parsing is missing the group-policy
source, so `channels status --channel telegram` cannot surface
`TELEGRAM_GROUP_POLICY` for Hermes sandboxes. Update `rendered-config-parser.ts`
in the `context.agentId === "hermes"` branch of the parser so it also returns a
config entry for `TELEGRAM_GROUP_POLICY`, alongside the existing `allowedIds`
and `requireMention` entries, and make sure it can resolve the value from
environment-based configuration as well as any structured config source used by
the Telegram channel status flow.
---
Nitpick comments:
In `@src/lib/actions/sandbox/channel-status.ts`:
- Around line 874-982: The rendered-config parsing and comparison helpers are
currently living in the actions layer, but they should be moved into the
side-effect-free messaging layer. Relocate parseEnvLines, unquoteEnvValue,
parseRenderedConfigSource, compareConfigSource, configValuesEqual,
listConfigValues, booleanConfigValue, and any related config formatting helper
such as formatConfigValue into src/lib/messaging/**, keeping channel-status.ts
focused on orchestration only. Then update channel-status.ts to import and use
those helpers from their new messaging location, preserving existing behavior
while aligning with the layer ownership rules.
- Around line 829-848: The all-channels path is repeatedly reading the same
rendered config target across channels, causing duplicate sandbox calls and
avoidable timeout overhead. Add a per-invocation cache in the channel-status
flow so shared reads are reused across calls, using the resolved target as the
key; update readConfigSourceValues and the
buildBasicChannelReport/buildConfigStatusSignals path to consult that cache
before calling deps.execSandbox. Keep the existing per-source dedupe, but ensure
each target is read at most once for the entire status run.
🪄 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: 81f19417-b7c2-4944-a2f6-f14eb255f979
📒 Files selected for processing (19)
docs/reference/commands-nemohermes.mdxdocs/reference/commands.mdxsrc/commands/sandbox/channels/status.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.tssrc/lib/messaging/channels/index.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
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.
|
Signed-off-by: San Dang <sdang@nvidia.com>
|
Superseded by #6044. The replacement branch has the same final changes committed as a single GitHub-verified commit; this PR included an unsigned low-level follow-up commit after force-push was blocked. |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/lib/messaging/channels/manifests.test.ts (1)
225-232: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winThis alignment test is self-referential.
Both the expected value and
getBuiltInRenderedConfigParser()are driven byBUILT_IN_CHANNEL_MANIFESTS, so the assertion still passes if a built-in channel silently drops out of that list. Please anchor this to an external contract instead—e.g. assert the known built-in ids, or exercise a public channel-status path that proves each built-in manifest reaches a parser.As per path instructions, "Prefer observable outcomes through the public boundary over source-text, private-shape, or mock-call assertions."
🤖 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/messaging/channels/manifests.test.ts` around lines 225 - 232, The alignment test in manifests.test.ts is self-referential because both sides derive from BUILT_IN_CHANNEL_MANIFESTS, so it cannot detect a missing built-in manifest. Update the test around getBuiltInRenderedConfigParser to anchor on an external contract by asserting the known built-in channel ids or by exercising the public channel-status path that proves each built-in manifest is wired to a parser, rather than comparing BUILT_IN_CHANNEL_MANIFESTS to itself.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 `@src/lib/messaging/channels/manifests.test.ts`:
- Around line 225-232: The alignment test in manifests.test.ts is
self-referential because both sides derive from BUILT_IN_CHANNEL_MANIFESTS, so
it cannot detect a missing built-in manifest. Update the test around
getBuiltInRenderedConfigParser to anchor on an external contract by asserting
the known built-in channel ids or by exercising the public channel-status path
that proves each built-in manifest is wired to a parser, rather than comparing
BUILT_IN_CHANNEL_MANIFESTS to itself.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 8238ec44-d790-419c-a255-7a7245b52e9c
📒 Files selected for processing (8)
src/lib/actions/sandbox/channel-status-config.tssrc/lib/actions/sandbox/channel-status.test.tssrc/lib/actions/sandbox/channel-status.tssrc/lib/messaging/channels/discord/rendered-config-parser.test.tssrc/lib/messaging/channels/discord/rendered-config-parser.tssrc/lib/messaging/channels/manifests.test.tssrc/lib/messaging/channels/rendered-config-parser.tssrc/lib/messaging/channels/telegram/rendered-config-parser.ts
🚧 Files skipped from review as they are similar to previous changes (4)
- src/lib/messaging/channels/telegram/rendered-config-parser.ts
- src/lib/messaging/channels/rendered-config-parser.ts
- src/lib/messaging/channels/discord/rendered-config-parser.ts
- src/lib/actions/sandbox/channel-status.test.ts
<!-- 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 #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 #5695. Supersedes #5705 and #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>
<!-- 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
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.
Supersedes #5705.
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/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:clinpx 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 all-channel summary by default, with detailed reporting when a specific channel is selected.