fix(messaging): surface telegram config inputs in channels status - #5705
fix(messaging): surface telegram config inputs in channels status#5705laitingsheng wants to merge 37 commits into
Conversation
Signed-off-by: Tinson Lai <tinsonl@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 visible-config diagnostics infrastructure to surface Telegram channel configuration in ChangesTelegram Config Visibility in Channel Status and Doctor
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
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
|
Vitest E2E Scenario RecommendationRequired Vitest E2E scenarios: Dispatch required Vitest E2E scenarios:
Full Vitest E2E advisor summaryVitest E2E Scenario AdvisorBase: Required Vitest E2E scenarios
Optional Vitest E2E scenarios
Relevant changed files
|
PR Review Advisor — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
Review findings by urgency: 0 required fixes, 1 item to resolve/justify, 0 in-scope improvements
|
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 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/doctor.ts`:
- Around line 569-570: In the formatVisibleConfigValue function, empty arrays
are being rendered as blank strings because join(", ") on an empty array
produces an empty string. This hides the fact that a configuration value was
explicitly set. Modify the array handling logic to check if the array is empty
and return a visible representation (such as "[]") to indicate an empty array
was configured, before applying the map and join operations for non-empty
arrays.
🪄 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: bf64f189-7818-4a42-a2dc-3433a31c4c97
📒 Files selected for processing (3)
src/lib/actions/sandbox/channel-status.test.tssrc/lib/actions/sandbox/doctor-flow.test.tssrc/lib/actions/sandbox/doctor.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- src/lib/actions/sandbox/channel-status.test.ts
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…tics Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
There was a problem hiding this comment.
♻️ Duplicate comments (1)
src/lib/messaging/diagnostics.ts (1)
96-122: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winEmpty array persists as a blank
okdetail.An empty array
[]passes therawValue !== ""guard on Line 96 (it's not the empty string), so it's treated as"persisted", butstringifyValue([])on Line 121 returns"". The signal then renders a blank detail withokseverity, hiding that a value was explicitly configured. This is the same root cause previously flagged indoctor.ts, now centralized here inresolveVisibleConfigDisplay/stringifyValue.Proposed fix
function stringifyValue(value: MessagingSerializableValue): string { if (typeof value === "string") return value; if (typeof value === "boolean") return value ? "true" : "false"; if (typeof value === "number") return String(value); - if (Array.isArray(value)) return value.map(stringifyValue).join(", "); + if (Array.isArray(value)) { + if (value.length === 0) return "[]"; + return value.map(stringifyValue).join(", "); + } return JSON.stringify(value); }🤖 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/diagnostics.ts` around lines 96 - 122, The empty array case in resolveVisibleConfigDisplay/stringifyValue is being treated as a persisted value but renders as a blank detail. Update the guard in resolveVisibleConfigDisplay so values that stringify to an empty string (especially []) are not returned as persisted, or make stringifyValue return a non-empty representation for empty arrays. Ensure the fix keeps explicit empty array configuration visible instead of producing an empty ok detail.
🤖 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.
Duplicate comments:
In `@src/lib/messaging/diagnostics.ts`:
- Around line 96-122: The empty array case in
resolveVisibleConfigDisplay/stringifyValue is being treated as a persisted value
but renders as a blank detail. Update the guard in resolveVisibleConfigDisplay
so values that stringify to an empty string (especially []) are not returned as
persisted, or make stringifyValue return a non-empty representation for empty
arrays. Ensure the fix keeps explicit empty array configuration visible instead
of producing an empty ok detail.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 26a568c2-d18a-43ad-88e4-e89f8536a8d0
📒 Files selected for processing (7)
src/lib/actions/sandbox/channel-status.test.tssrc/lib/actions/sandbox/channel-status.tssrc/lib/actions/sandbox/doctor-flow.test.tssrc/lib/actions/sandbox/doctor.tssrc/lib/messaging/channels/telegram/manifest.tssrc/lib/messaging/diagnostics.tssrc/lib/messaging/manifest/types.ts
🚧 Files skipped from review as they are similar to previous changes (2)
- src/lib/actions/sandbox/doctor-flow.test.ts
- src/lib/actions/sandbox/channel-status.ts
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 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/doctor.ts`:
- Around line 529-535: Default the doctor agent the same way as channels status
by updating showSandboxDoctor’s agent selection before calling
collectVisibleConfigRecords. The current sb.agent ?? null path can leave older
sandboxes with a null agent, which causes OpenClaw-only config inputs to be
skipped; resolve the agent using the same fallback behavior as
showSandboxChannelStatus (entry.agent || "openclaw") and then pass that through
asMessagingAgent so doctor and channels status stay consistent.
🪄 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: d975e440-410d-4325-9064-63be07fcf0a5
📒 Files selected for processing (6)
src/lib/actions/sandbox/channel-status.test.tssrc/lib/actions/sandbox/channel-status.tssrc/lib/actions/sandbox/doctor.tssrc/lib/messaging/channels/telegram/manifest.tssrc/lib/messaging/diagnostics.tssrc/lib/messaging/manifest/types.ts
🚧 Files skipped from review as they are similar to previous changes (3)
- src/lib/messaging/channels/telegram/manifest.ts
- src/lib/actions/sandbox/channel-status.ts
- src/lib/messaging/manifest/types.ts
…d-plan path Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…tor paths Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…elegram-config-visibility Signed-off-by: Tinson Lai <tinsonl@nvidia.com> # Conflicts: # src/lib/actions/sandbox/channel-status.ts # src/lib/actions/sandbox/doctor.ts
PR Review Advisor (Nemotron Ultra) — 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.
|
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
|
🌿 Preview your docs: https://nvidia-preview-pr-5705.docs.buildwithfern.com/nemoclaw |
Cherry-pick of 23a9b6e from origin/codex/fix-onboard-test-src-import (PR #5927) so this branch can rebuild dist without tripping the no-test-dist-imports guard. Refactors the validation test to drive createInferenceSelectionValidationHelpers from src instead of spawning a child node process against dist artifacts. Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…status + doctor Add an isInteractive flag to compileTelegramPlanForTests and drive both command paths through serializeSandboxMessagingStateForDisk + the real getMessagingPlanFromEntry so the visible-config diagnostics now have command-renderer coverage matching the linked onboard-to-registry-to-diagnostics flow. Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…elegram-config-visibility Signed-off-by: Tinson Lai <tinsonl@nvidia.com> # Conflicts: # test/package-contract/inference-selection-validation.test.ts
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…elegram-config-visibility
…t fixtures Stricter manifest registration validation, telegram groupPolicy human-readable display, and shared sandbox test utilities address the open advisor findings on PR 5705. Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…gn default display Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…elegram-config-visibility
Selective E2E Results — ❌ Some jobs failedRun: 28330560251
|
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Selective E2E Results — ❌ Some jobs failedRun: 28330968837
|
… imports Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…e scanner Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…elegram-config-visibility
…h tests Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…elegram-config-visibility
…viders Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
There was a problem hiding this comment.
Reviewed this PR and the issue #5695. Issue #5695 looks like a feature request rather than a Telegram bug.
Currently, there is no channel exposing its configuration via channel status or doctor.
I'd like to reframe the PR and issue into a feature request, exposing config value via channel status, not focusing for Telegram only.
cc: @cv @ericksoa for comments
➜ NemoClaw git:(main) nemoclaw tm channels status
NemoClaw channels status: tm / telegram
[ok] Channel registration: telegram registered
[ok] Policy coverage: telegram preset applied
[info] Deep diagnostics: not implemented for telegram; see `nemoclaw tm doctor` and `nemoclaw tm logs --follow`
➜ NemoClaw git:(main) nemoclaw tm channels status --channel teams
NemoClaw channels status: tm / teams
[ok] Channel registration: teams registered
[ok] Policy coverage: teams preset applied
[info] Deep diagnostics: not implemented for teams; see `nemoclaw tm doctor` and `nemoclaw tm logs --follow`
<!-- 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
nemoclaw <sandbox> channels status --channel telegramandnemoclaw <sandbox> doctornow read each channel's persisted plan inputs and render one signal/check per visible config input declared by the manifest. Operators can confirm the active Telegram group policy and mention-mode behavior directly from those commands instead of digging into logs or config files.The diagnostics renderer is opt-in (
safeToPrintInDiagnosticson the manifest input), agent-scoped (agentApplicabilityskips OpenClaw-only inputs on Hermes), and validates persisted values against the manifestvalidValuesallowlist (out-of-allowlist or present-but-empty values render boundedinvalid persisted value (...)text rather than echoing the raw value).Related Issue
Fixes #5695
Fixes #5691
Changes
MessagingChannelDiagnosticSpecwithvisibleConfigInputs. Inputs opt in via the newsafeToPrintInDiagnostics: truemanifest property; prompt-labeled config inputs without this flag (for example TelegramallowedIds) no longer reach diagnostics. Secrets are still excluded bykind.valueDisplayper-input map for human-readable behaviour text. TelegramrequireMentionrendersmention-only (TELEGRAM_REQUIRE_MENTION=1)/all group messages (TELEGRAM_REQUIRE_MENTION=0)rather than raw1/0.agentApplicabilityper-input filter. TelegramgroupPolicyis marked["openclaw"], so a Hermes sandbox no longer reports the OpenClaw-only setting.resolveVisibleConfigDisplayandcollectVisibleConfigRecordsshared helpers insrc/lib/messaging/diagnostics.ts. Bothchannels status(src/lib/actions/sandbox/channel-status.ts) anddoctor(src/lib/actions/sandbox/doctor.ts) consume normalised{ input, display }records.channels statusnow only renders visible-config signals when the channel is registered and not paused for the sandbox;doctoronly inspects active channels. Defaults no longer surface for unregistered or paused channels.SandboxEntryrows whoseagentfield predates the runtime split, matching thechannels statusconvention.validValuesallowlist, are present-but-empty, or are not scalar render[warn] invalid persisted value (...)rather than echoing the raw value. This keeps the diagnostic boundary from leaking corrupted plan state.Type of Change
Verification
Verifiedin GitHubnpx prek run --from-ref main --to-ref HEADpassesnpm testpasses (broad runtime changes only)npm run docsbuilds without warnings (doc changes only)Signed-off-by: Tinson Lai tinsonl@nvidia.com
Summary by CodeRabbit