fix(messaging): enable generated Slack channel config#4222
Conversation
Signed-off-by: Chengjie Wang <chengjiew@nvidia.com>
|
This repository limits contributors to 10 open pull requests. Please close or merge existing PRs before opening new ones. |
E2E Advisor RecommendationRequired E2E: Dispatch hint: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
E2E Scenario Advisor RecommendationRequired scenario E2E: Dispatch required scenario E2E:
Full scenario advisor summaryE2E Scenario AdvisorBase: Required scenario E2E
Optional scenario E2E
Relevant changed files
|
PR Review AdvisorFindings: 1 needs attention, 3 worth checking, 1 nice ideas Review findings🛠️ Needs attention
🔎 Worth checking
🌱 Nice ideas
Since last review detailsCurrent findings:
This is an automated advisory review. A human maintainer must make the final merge decision. |
Signed-off-by: Chengjie Wang <chengjiew@nvidia.com>
Signed-off-by: Chengjie Wang <chengjiew@nvidia.com>
|
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 as they are similar to previous changes (1)
📝 WalkthroughWalkthroughConfig generator now emits top-level ChangesSlack channel enablement
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Selective E2E Results — ❌ Some jobs failedRun: 26540390546
|
Selective E2E Results — ✅ All requested jobs passedRun: 26541299471
|
Selective E2E Results — ✅ All requested jobs passedRun: 26542067616
|
There was a problem hiding this comment.
🧹 Nitpick comments (1)
test/e2e-scenario/validation_suites/messaging/slack/00-slack-provider-state.sh (1)
19-21: ⚡ Quick winConsider splitting assertions for more specific error messages.
The current Python one-liner will fail with the same generic message whether
channels.slack.enabledis missing,plugins.entries.slack.enabledis missing, either is false, or the JSON structure is malformed. Splitting into separate assertions or adding try/except would help pinpoint the exact failure during CI debugging.🔍 Example: separate assertions for clearer errors
- if ! printf '%s\n' "${content}" | python3 -c 'import json, sys; cfg=json.load(sys.stdin); assert cfg["channels"]["slack"]["enabled"] is True; assert cfg["plugins"]["entries"]["slack"]["enabled"] is True'; then - e2e_fail "expected-state.messaging.slack.openclaw-enabled missing channels.slack.enabled or plugins.entries.slack.enabled" + if ! printf '%s\n' "${content}" | python3 -c 'import json, sys; cfg=json.load(sys.stdin); assert cfg.get("channels", {}).get("slack", {}).get("enabled") is True, "channels.slack.enabled not true"'; then + e2e_fail "expected-state.messaging.slack.openclaw-enabled channels.slack.enabled missing or not true" + fi + if ! printf '%s\n' "${content}" | python3 -c 'import json, sys; cfg=json.load(sys.stdin); assert cfg.get("plugins", {}).get("entries", {}).get("slack", {}).get("enabled") is True, "plugins.entries.slack.enabled not true"'; then + e2e_fail "expected-state.messaging.slack.openclaw-enabled plugins.entries.slack.enabled missing or not true" fi🤖 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/e2e-scenario/validation_suites/messaging/slack/00-slack-provider-state.sh` around lines 19 - 21, The combined python one-liner that reads from "${content}" and asserts both cfg["channels"]["slack"]["enabled"] and cfg["plugins"]["entries"]["slack"]["enabled"] should be split into two distinct checks (or a try/except that emits specific errors) so failures are actionable; update the python3 -c invocation that consumes "${content}" (or replace with two invocations) to first verify cfg["channels"]["slack"]["enabled"] and call e2e_fail with a clear message if missing/false, then separately verify cfg["plugins"]["entries"]["slack"]["enabled"] with its own e2e_fail message, and also handle JSON parse/missing-key exceptions to surface helpful diagnostics instead of a single generic failure.
🤖 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/e2e-scenario/validation_suites/messaging/slack/00-slack-provider-state.sh`:
- Around line 19-21: The combined python one-liner that reads from "${content}"
and asserts both cfg["channels"]["slack"]["enabled"] and
cfg["plugins"]["entries"]["slack"]["enabled"] should be split into two distinct
checks (or a try/except that emits specific errors) so failures are actionable;
update the python3 -c invocation that consumes "${content}" (or replace with two
invocations) to first verify cfg["channels"]["slack"]["enabled"] and call
e2e_fail with a clear message if missing/false, then separately verify
cfg["plugins"]["entries"]["slack"]["enabled"] with its own e2e_fail message, and
also handle JSON parse/missing-key exceptions to surface helpful diagnostics
instead of a single generic failure.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 0730f6b2-f1e1-4888-ab4b-cb8d999cb24b
📒 Files selected for processing (1)
test/e2e-scenario/validation_suites/messaging/slack/00-slack-provider-state.sh
Selective E2E Results — ✅ All requested jobs passedRun: 26544683761
|
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 `@test/e2e-scenario/validation_suites/lib/messaging_providers.sh`:
- Line 119: The command that assigns remote using openshell—remote="$(openshell
sandbox exec --name "${sandbox_name}" -- cat "${path}" 2>/dev/null || true)"—can
hang; wrap the sandbox exec call with a timeout (e.g., the timeout utility or
the openshell --timeout option if available) so the command is forcibly killed
after a short period (e.g., 20–30s) and the script continues; update the
invocation so failures still fall back to || true and ensure any timeout exit
codes are handled the same way.
🪄 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: 7cb748ea-7b6e-4019-8425-eafd90c69365
📒 Files selected for processing (4)
test/e2e-scenario/framework-tests/e2e-suite-runner.test.tstest/e2e-scenario/nemoclaw_scenarios/helpers/emit-context-from-plan.shtest/e2e-scenario/validation_suites/lib/messaging_providers.shtest/e2e-scenario/validation_suites/messaging/slack/00-slack-provider-state.sh
🚧 Files skipped from review as they are similar to previous changes (1)
- test/e2e-scenario/validation_suites/messaging/slack/00-slack-provider-state.sh
…ter rebuild (#4403) ## Summary Fixes #4314 Fixes #4390 This is now the unified messaging-channel PR: it keeps the original #4403 runtime verification path and folds in the full #4400 OpenClaw channel activation / plugin-build / E2E coverage set. OpenClaw 2026.5.22+ no longer auto-starts a messaging bridge from the account-level `enabled` flag alone — the channel must also be marked enabled at the top level for the bridge module to load. NemoClaw#4189 fixed this for Slack (PR #4222); the same gap silently produced "no Telegram process / no logs" for Telegram (#4314, #4390) and would silently break Discord too. This PR: - Bakes `channels.<name>.enabled: true` for Telegram, Discord, Slack, and WhatsApp in generated `openclaw.json`. - Enables matching `plugins.entries.<channel>` records so OpenClaw discovers selected messaging providers through its real channel/plugin path. - Pins external OpenClaw messaging plugins at image build time with `scripts/openclaw-build-messaging-plugins.py` instead of relying on unversioned `openclaw doctor --fix` catalog drift. - Adds a gated Telegram startup-grace diagnostic breadcrumb when the bridge fails to log startup within the grace window. - Adds a post-rebuild runtime check to `nemoclaw <sandbox> channels add <channel>` for verifiable OpenClaw channels (telegram/discord/slack), surfacing missing enabled flags, missing startup breadcrumbs, and credential/startup warnings. - Extends messaging-provider E2E coverage with generated activation checks, `openclaw channels list --all --json` runtime discovery checks, pinned plugin build coverage, fake provider APIs, and optional live Telegram/Discord/Slack `openclaw message send` paths when repository secrets are configured. - Keeps WeChat out of upfront generated channel config; WeChat remains on the existing late seed path after plugin install. ## Reproduction (issue #4390 + #4314) Before the fix, generated config with Telegram selected during onboarding: ```json "channels": { "telegram": { "accounts": { "default": { ... } } } } ``` No top-level `enabled: true` meant OpenClaw skipped loading the bridge. No Telegram process spawned, `/sandbox/.openclaw/telegram/` stayed empty, and no startup/error breadcrumb appeared. After the fix: ```json "channels": { "telegram": { "enabled": true, "accounts": { "default": { ..., "enabled": true } } } } ``` The bridge module is loadable, diagnostics can report silent startup failure, and `channels add telegram` probes the rebuilt runtime instead of leaving users with radio silence. ## Test plan Local validation on the unified branch: - [x] `python3 -m py_compile scripts/generate-openclaw-config.py scripts/openclaw-build-messaging-plugins.py` - [x] `NEMOCLAW_MESSAGING_CHANNELS_B64=$(printf '%s' '["telegram","discord","slack","whatsapp"]' | base64 | tr -d '\n') OPENCLAW_VERSION=2026.5.22 python3 scripts/openclaw-build-messaging-plugins.py --dry-run` - [x] `bash -n test/e2e/test-messaging-providers.sh test/e2e/lib/discord-rest-policy-proof.sh test/e2e/lib/slack-api-proof.sh test/e2e/lib/telegram-api-proof.sh` - [x] `git diff --check HEAD~1..HEAD` - [x] `npm ci --ignore-scripts` - [x] `npm run build:cli` - [x] `npx vitest run test/generate-openclaw-config.test.ts test/openclaw-build-messaging-plugins.test.ts test/sandbox-build-context.test.ts test/sandbox-provisioning.test.ts test/channels-add-preset.test.ts test/telegram-diagnostics.test.ts test/e2e-script-workflow.test.ts test/validate-e2e-coverage.test.ts` — 160 passed Live Telegram bot E2E was not run from the local triage worktree because no Telegram bot credential is available locally; the PR wires optional live repository secrets through the nightly reusable workflow and keeps hermetic fake-provider proofs for CI. ## DCO ``` Signed-off-by: Yimo Jiang <yimoj@nvidia.com> ``` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Startup watchdog emits a single breadcrumb when an OpenClaw gateway bridge fails to start within a configurable grace period. * Post-channel-add now verifies bridged channels after a rebuild. * Image/sandbox build now includes a messaging-plugin installer to pin/install provider plugins. * **Bug Fixes** * Ensure channels, accounts, and plugin entries are marked enabled so bridges activate reliably. * **Tests** * Expanded regression/E2E coverage with fake provider APIs, startup diagnostics, and live-credential wiring for Telegram/Discord/Slack. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/NVIDIA/NemoClaw/pull/4403?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Yimo Jiang <yimoj@nvidia.com> Co-authored-by: Aaron Erickson <aerickson@nvidia.com>
## Summary Refreshes the NemoClaw documentation for the v0.0.54 release and regenerates user skills from the Fern MDX source. Also keeps the Fern CLI pin current so local docs checks use the upgraded Fern version. ## Related Issue <!-- No single related issue. This is release-prep documentation catch-up. --> ## Changes - #4403 -> `docs/manage-sandboxes/messaging-channels.mdx`, `docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Document Telegram, Discord, and Slack post-rebuild bridge verification and summarize channel activation fixes. - #4222 -> `docs/about/release-notes.mdx`: Include Slack generated channel enablement in the v0.0.54 messaging summary. - #4346 -> `docs/get-started/windows-preparation.mdx`, `docs/about/release-notes.mdx`: Document safer Windows bootstrap behavior for Ubuntu first-run and Docker Desktop WSL integration. - #4416 -> `docs/inference/use-local-inference.mdx`, `docs/about/release-notes.mdx`: Document the Docker Desktop WSL requirement for Windows-host Ollama. - #4442 -> `docs/about/release-notes.mdx`: Summarize the optional NemoHermes native web dashboard and related environment variables. - #4426 -> `docs/about/release-notes.mdx`: Summarize copy-paste recovery hints for invalid sandbox names and missing NVIDIA API keys. - #4459 -> `docs/about/release-notes.mdx`: Summarize the Linuxbrew prefix fix for sandbox Homebrew usage. - #4450 -> `docs/about/release-notes.mdx`: Summarize `/nemoclaw` slash command startup activation. - #4468 -> `docs/about/release-notes.mdx`: Summarize scope-upgrade approval recovery. - #4325 -> `docs/about/release-notes.mdx`: Summarize the narrowed `web_fetch` host-gateway allowance. - #4474 -> `docs/about/release-notes.mdx`: Summarize Hermes Provider smoke-check behavior for OAuth versus Nous API key setup. - Refresh generated `.agents/skills/nemoclaw-user-*` references from `docs/` and update `fern/fern.config.json` to Fern `5.41.2`. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [x] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## 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. --> - [ ] `npx prek run --all-files` passes - [ ] `npm test` passes - [ ] Tests added or updated for new or changed behavior - [x] No secrets, API keys, or credentials committed - [x] Docs updated for user-facing behavior changes - [ ] `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) --- <!-- DCO sign-off required by CI. Run: git config user.name && git config user.email --> Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Optional NemoHermes native web dashboard (configurable port and TUI) * GPU memory cleanup now unloads Ollama models when switching providers or stopping services * **Bug Fixes** * Improved sandbox name validation with suggested slug recovery * Windows-host Ollama now requires Docker Desktop WSL integration and exits with remediation guidance when unsupported * **Documentation** * Clarified quickstart/onboard flow, installer TTY/non‑TTY guidance, Hermes Docker prerequisites, sandbox hardening, and channels add rebuild checks <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/NVIDIA/NemoClaw/pull/4539?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Summary
channels.slack.enabled: trueinto generated OpenClaw config when Slack is selected during onboarding.Test Plan
npm test -- test/generate-openclaw-config.test.tsnpm test -- test/onboard-messaging.test.tsnpm test -- test/nemoclaw-start.test.tsgit diff --check && python3 -m py_compile scripts/generate-openclaw-config.pynpm run build:cliFixes #4189
Signed-off-by: Chengjie Wang chengjiew@nvidia.com
Summary by CodeRabbit
Improvements
Tests
Reliability