Skip to content

feat(messaging): migrate enrollment to manifest hooks#4248

Merged
cv merged 74 commits into
mainfrom
u/sdang/3896-phase-2-messaging-enrollment
Jun 5, 2026
Merged

feat(messaging): migrate enrollment to manifest hooks#4248
cv merged 74 commits into
mainfrom
u/sdang/3896-phase-2-messaging-enrollment

Conversation

@sandl99
Copy link
Copy Markdown
Contributor

@sandl99 sandl99 commented May 26, 2026

Summary

Migrates messaging enrollment from the legacy ad hoc onboard implementation to the manifest-driven workflow compiler path.

The PR keeps the existing operator-facing enrollment UX, but moves the source of truth for channel setup into channel manifests and registered messaging hooks. Telegram,
Discord, Slack, WeChat, and WhatsApp now declare their enrollment prompts, config inputs, credential bindings, policy needs, render targets, and setup hooks through the
manifest system.

3 key changes

  • Moves onboard messaging orchestration into messaging-channel-setup.ts, with shared manifest-style channels
  • Build messaging plan (a configuration) file including configuration, policy, credential, agent config hooks,
  • Store messaging state into SandboxEntry (sandboxes.json)

Test results

OpenClaw + Hermes

Discord

image

Telegram

image

WeChat

image

Slack

image

Related Issue

Closes #4247 #4535

Changes

  • Moves messaging setup orchestration into messaging-channel-setup.ts and shared helpers into messaging/utils.ts.
  • Adds common manifest hooks for token paste and configuration prompts, then binds Telegram, Discord, Slack, WeChat, and WhatsApp enrollment through channel manifests.
  • Uses static built-in messaging hook initialization so MessagingWorkflowPlanner resolves hooks from the manifest registry.
  • Keeps WeChat QR enrollment and Telegram reachability behavior aligned with the existing onboard UX.
  • Updates compiler, hook runner, channel manifest, and onboard tests for the migrated enrollment flow.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Verification

  • npx prek run --all-files passes
  • npm test passes
  • Tests added or updated for new or changed behavior
  • No secrets, API keys, or credentials committed
  • Docs updated for user-facing behavior changes
  • make docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: San Dang sdang@nvidia.com

Summary by CodeRabbit

  • New Features

    • Manifest-driven messaging onboarding and plan-based add/stop/start/remove flows with per-sandbox serialized messaging plans persisted.
    • Shared config-prompt and token-paste enrollment hooks; WeChat host-QR runtime and improved host-QR enrollment flow.
  • Improvements

    • Richer enrollment/help text, empty-value guidance, QR pairing UX and logging.
    • Slack token format hints, explicit credential validation with clear skip/failure behavior.
    • Rebuild and lifecycle preserve/reapply messaging plans; improved non-interactive behavior and diagnostics.

sandl99 and others added 28 commits May 22, 2026 10:03
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
# Conflicts:
#	src/lib/messaging/manifest/types.test.ts
## Summary
Adds the phase-1 messaging manifest compiler that converts channel
manifests into a serializable sandbox messaging plan. The compiler
resolves channel inputs through env keys and interactive enrollment
hooks, then delegates credential, policy, render, build-step,
state-update, and health-check planning to small pure engines.

## Related Issue
Fixes #3994

## Changes
- Add `ManifestCompiler` with interactive enrollment-hook input
resolution and env-key input initialization.
- Add compiler plan engines for credential bindings, network policy,
agent render fragments, build steps, state updates, and health checks.
- Expand `SandboxMessagingPlan` and related manifest plan types to the
top-level plan shape required by #3994.
- Add coverage for built-in Telegram/Discord/Slack/WeChat/WhatsApp
plans, Hermes WeChat policy aliasing, non-interactive env input
behavior, secret-free JSON plans, disabled channels, and a synthetic
non-built-in channel.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [ ] `npx prek run --all-files` passes
- [ ] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] 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)

Additional verification performed:
- `npm test -- --project cli src/lib/messaging` passes.
- `npm run typecheck:cli` passes.
- `npm run lint -- src/lib/messaging` passes with the existing unrelated
warning in `src/lib/onboard/child-exit-tracker.test.ts`.
- `git diff --check` passes.
- `npm run source-shape:check` passes.
- `npx prek run --all-files` and the normal pre-push hook were attempted
and currently fail in unrelated full CLI doctor/debug/snapshot tests
outside the messaging compiler changes.

---
Signed-off-by: San Dang <sdang@nvidia.com>

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added manifest compilation system for messaging channels with support
for multiple agents and workflows
  * Implemented credential binding and authentication management
  * Added network policy configuration and agent rendering capabilities
  * Introduced health check and build step planning
  * Added state persistence and hydration management
  * Implemented placeholder resolution for sandbox names and credentials

* **Tests**
* Added comprehensive test suite validating compilation behavior,
credential handling, and plan serialization

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/NVIDIA/NemoClaw/pull/4069?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: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
@sandl99 sandl99 self-assigned this May 26, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 26, 2026

Review Change Stack

Warning

Review limit reached

@cv, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 8 minutes and 32 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 1d4ca5c4-ebdd-4004-9293-02b7f14a3d96

📥 Commits

Reviewing files that changed from the base of the PR and between d5cc5d1 and 58a11cb.

📒 Files selected for processing (3)
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/actions/sandbox/rebuild.ts
  • src/lib/onboard.ts
📝 Walkthrough

Walkthrough

Migrates messaging enrollment and channel lifecycle to manifest-driven hooks and planner/compiler orchestration, adds shared config-prompt/token-paste hooks and Slack/WeChat validators, refactors onboarding to return/persist SandboxMessagingPlan, integrates plan staging in rebuild, and updates tests and e2e scripts.

Changes

Messaging Channel Enrollment Manifest Migration

Layer / File(s) Summary
Manifest schema and utilities
src/lib/messaging/manifest/types.ts, src/lib/messaging/utils.ts, src/lib/messaging/index.ts
Added enrollment/help fields, input formatting hints, agent/context helpers, manifest seed logic, credential-presence checks, and re-exported utils.
Channel manifests & tests
src/lib/messaging/channels/*/manifest.ts, src/lib/messaging/channels/manifests.test.ts
Updated manifests (Telegram/Discord/Slack/WeChat/WhatsApp) with enrollmentHelp/enrollmentNotes, emptyValueMessage/promptWhenInput, token format hints, added per-channel config-prompt enroll hooks, and adjusted manifest tests.
Config-prompt hook
src/lib/messaging/hooks/common/config-prompt.ts, src/lib/messaging/hooks/common/config-prompt.test.ts
New shared configPromptHook: resolves manifest config fields, conditionally skips prompting, records env/outputs/state, supports mention-mode, and includes ordering/gating tests.
Token-paste hook refactor
src/lib/messaging/hooks/common/token-paste.ts, tests
Token resolution now reads secret input specs from manifests, returns token+source, validates formats, persists prompted credentials, logs enrollment notes, and updated tests/registrations.
WeChat host-QR & ilink login
src/lib/messaging/channels/wechat/hooks/*
Added default host-QR runtime options and runner, merged defaults into registration, added optional log callback and clearer success/failure logging; tests updated.
Built-in hooks & Slack validate
src/lib/messaging/hooks/builtins.ts, src/lib/messaging/hooks/common/*, src/lib/messaging/channels/slack/hooks/*
Composed common hook registrations (token-paste + config-prompt), exposed BUILT_IN_MESSAGING_HOOK_REGISTRY, added Slack validate-credentials hook and registrations, and adjusted tests.
Manifest compiler
src/lib/messaging/compiler/manifest-compiler.ts, tests
Defaulted compiler hooks to BUILT_IN_MESSAGING_HOOK_REGISTRY, apply credential availability before building hook inputs, normalize env/config values, skip enrollment hooks whose outputs already exist, pass isInteractive flag, and updated tests.
Workflow planner
src/lib/messaging/compiler/workflow-planner.ts, tests
Added planner methods to derive add/stop/start/remove/rebuild plans from sandbox entries, merging credential availability and plan mutations; added sandbox-entry plan helpers and tests.
Applier & planner tests
src/lib/messaging/applier/setup-applier.test.ts, src/lib/messaging/compiler/workflow-planner.test.ts
Updated fixtures to include Slack validation and WeChat log stubs, added withEnv helper, and adjusted expected hook request sequences to include config-prompt hooks and new reachability sequencing.
Onboarding manifest-first refactor
src/lib/onboard/messaging-channel-setup.ts, src/lib/onboard.ts
Rewrote onboarding to seed channels from manifests, present interactive selection UI, snapshot credential availability, build/persist SandboxMessagingPlan via MessagingWorkflowPlanner, and delegate setup from onboard.ts.
Onboarding tests & integration
src/lib/onboard/messaging-channel-setup.test.ts, test/onboard-messaging.test.ts
Expanded tests for Slack token validation flows, Telegram reachability gating, Discord prompt gating, WeChat host-QR enrollment routing, WhatsApp tokenless enrollment, and serialized messaging-plan assertions.
policy-channel manifest integration
src/lib/actions/sandbox/policy-channel.ts, test/channels-add-preset.test.ts
Replaced hardcoded channel/provider wiring with manifest registry; add/remove/start/stop use MessagingWorkflowPlanner to build/persist manifest-driven SandboxMessagingPlan, collect manifest-declared credentials, and apply plans to registry/session.
Registry persistence
src/lib/state/registry.ts
Added SandboxMessagingState schema and persisted messaging field on SandboxEntry with safe deep-clone logic.
Rebuild staging
src/lib/actions/sandbox/rebuild.ts
Stage messaging rebuild plan from sandbox entry via MessagingWorkflowPlanner and abort preflight on staging errors.
Misc scripts & e2e
scripts/install.sh, test/e2e/*, test/channels-add-preset.test.ts
Installer path normalization, expanded Telegram reachability gating in e2e tests, host registry assertions for messaging plan/config, and multiple test harness/env updates.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • NVIDIA/NemoClaw#4577: Modifies policy-channel.ts add-channel flow; closely related to the manifest-driven add logic.
  • NVIDIA/NemoClaw#4745: Touches rebuild preflight; related to messaging-plan staging in rebuild.
  • NVIDIA/NemoClaw#4536: Persists manifest-derived messaging plans and rebuild staging; directly related.

Suggested labels

area: onboarding, Integration: Slack, Integration: WhatsApp

Suggested reviewers

  • ericksoa
  • cv
  • prekshivyas

Poem

"I’m a rabbit in the shell so spry,
Manifests hop and hooks reply.
Prompts and QR lights glow at night,
Plans persist, rebuild takes flight.
Hop, save, deploy — the code feels right!"

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch u/sdang/3896-phase-2-messaging-enrollment

@cv cv added v0.0.58 Release target and removed v0.0.57 Release target labels Jun 3, 2026
@wscurran wscurran added area: integrations Third-party service integration behavior area: messaging Messaging channels, bridges, manifests, or channel lifecycle feature PR adds or expands user-visible functionality and removed enhancement: integration labels Jun 3, 2026
@cv cv added v0.0.59 Release target and removed v0.0.58 Release target labels Jun 4, 2026
Signed-off-by: San Dang <sdang@nvidia.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 26931388430
Target ref: d999e1822ec786380042e470f9f52826d12dde9b
Workflow ref: main
Requested jobs: all (no filter)
Summary: 56 passed, 0 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ✅ success
brave-search-e2e ✅ success
channels-add-remove-e2e ✅ success
channels-stop-start-e2e ✅ success
cloud-e2e ✅ success
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
credential-migration-e2e ✅ success
credential-sanitization-e2e ✅ success
device-auth-health-e2e ✅ success
diagnostics-e2e ✅ success
docs-validation-e2e ✅ success
double-onboard-e2e ✅ success
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-dashboard-e2e ✅ success
hermes-discord-e2e ✅ success
hermes-e2e ✅ success
hermes-inference-switch-e2e ✅ success
hermes-onboard-security-posture-e2e ✅ success
hermes-root-entrypoint-smoke-e2e ✅ success
hermes-slack-e2e ✅ success
inference-routing-e2e ✅ success
issue-2478-crash-loop-recovery-e2e ✅ success
issue-3600-gpu-proof-optional-e2e ✅ success
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
network-policy-e2e ✅ success
onboard-negative-paths-e2e ✅ success
onboard-repair-e2e ✅ success
onboard-resume-e2e ✅ success
openclaw-discord-pairing-e2e ✅ success
openclaw-inference-switch-e2e ✅ success
openclaw-onboard-security-posture-e2e ✅ success
openclaw-slack-pairing-e2e ✅ success
openclaw-tui-chat-correlation-e2e ✅ success
openshell-gateway-upgrade-e2e ✅ success
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ✅ success
rebuild-hermes-stale-base-e2e ✅ success
rebuild-openclaw-e2e ✅ success
runtime-overrides-e2e ✅ success
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ✅ success
sessions-agents-cli-e2e ✅ success
shields-config-e2e ✅ success
skill-agent-e2e ✅ success
snapshot-commands-e2e ✅ success
state-backup-restore-e2e ✅ success
telegram-injection-e2e ✅ success
token-rotation-e2e ✅ success
tunnel-lifecycle-e2e ✅ success
upgrade-stale-sandbox-e2e ✅ success
vm-driver-privileged-exec-routing-e2e ✅ success

sandl99 added 2 commits June 4, 2026 16:52
## Summary
Persist manifest messaging plans through channel lifecycle operations so
add, stop, start, remove, and rebuild can carry the new architecture
state in `SandboxEntry` while legacy registry fields continue to work.

## Related Issue
Fixes #4535
Refs #3896

## Changes
- Added `MessagingWorkflowPlanner` helpers that merge a compiled
add-channel plan into a stored sandbox plan and mutate stored plans for
stop/start/remove/rebuild.
- Updated `channels add`, `channels stop`, `channels start`, and
`channels remove` to write `SandboxEntry.messaging.plan` without
removing legacy registry updates.
- Staged stored manifest plans during rebuild through the existing
messaging plan env path.
- Added planner tests for add merge, stop/start mutation, remove
pruning, rebuild staging from stored plans, and no-compile behavior when
no stored plan exists.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [ ] `npx prek run --all-files` passes
- [ ] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `npm run docs` builds without warnings (doc changes only)
- [ ] 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)

---
Signed-off-by: San Dang <sdang@nvidia.com>


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

* **New Features**
* Improved messaging channel management with manifest-driven
configuration for Discord, Telegram, Slack, WeChat, and WhatsApp
* Support for multiple authentication modes including token-based and QR
code enrollment
  * Enhanced channel validation and reachability checks during setup

* **Bug Fixes**
  * More reliable credential handling and credential binding resolution
  * Better error messaging and validation for channel configuration

* **Tests**
* Expanded test coverage for channel enrollment workflows and manifest
validation

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 26944524013
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: all (no filter)
Summary: 37 passed, 0 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ✅ success
brave-search-e2e ✅ success
channels-add-remove-e2e ⚠️ cancelled
channels-stop-start-e2e ⚠️ cancelled
cloud-e2e ✅ success
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
credential-migration-e2e ✅ success
credential-sanitization-e2e ✅ success
device-auth-health-e2e ✅ success
diagnostics-e2e ⚠️ cancelled
docs-validation-e2e ✅ success
double-onboard-e2e ⚠️ cancelled
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-dashboard-e2e ✅ success
hermes-discord-e2e ✅ success
hermes-e2e ✅ success
hermes-inference-switch-e2e ✅ success
hermes-onboard-security-posture-e2e ✅ success
hermes-root-entrypoint-smoke-e2e ✅ success
hermes-slack-e2e ✅ success
inference-routing-e2e ✅ success
issue-2478-crash-loop-recovery-e2e ⚠️ cancelled
issue-3600-gpu-proof-optional-e2e ✅ success
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ⚠️ cancelled
onboard-negative-paths-e2e ⚠️ cancelled
onboard-repair-e2e ⚠️ cancelled
onboard-resume-e2e ⚠️ cancelled
openclaw-discord-pairing-e2e ✅ success
openclaw-inference-switch-e2e ✅ success
openclaw-onboard-security-posture-e2e ✅ success
openclaw-slack-pairing-e2e ✅ success
openclaw-tui-chat-correlation-e2e ⚠️ cancelled
openshell-gateway-upgrade-e2e ⚠️ cancelled
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ✅ success
rebuild-hermes-stale-base-e2e ⚠️ cancelled
rebuild-openclaw-e2e ⚠️ cancelled
runtime-overrides-e2e ✅ success
sandbox-operations-e2e ⚠️ cancelled
sandbox-survival-e2e ✅ success
sessions-agents-cli-e2e ⚠️ cancelled
shields-config-e2e ✅ success
skill-agent-e2e ⚠️ cancelled
snapshot-commands-e2e ✅ success
state-backup-restore-e2e ⚠️ cancelled
telegram-injection-e2e ✅ success
token-rotation-e2e ⚠️ cancelled
tunnel-lifecycle-e2e ✅ success
upgrade-stale-sandbox-e2e ✅ success
vm-driver-privileged-exec-routing-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 26944897258
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Workflow ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: channels-add-remove-e2e,channels-stop-start-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
channels-add-remove-e2e ✅ success
channels-stop-start-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Selective E2E Results — ❌ Some jobs failed

Run: 26957346522
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: all (no filter)
Summary: 55 passed, 1 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ✅ success
brave-search-e2e ✅ success
channels-add-remove-e2e ✅ success
channels-stop-start-e2e ✅ success
cloud-e2e ✅ success
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
credential-migration-e2e ✅ success
credential-sanitization-e2e ✅ success
device-auth-health-e2e ✅ success
diagnostics-e2e ✅ success
docs-validation-e2e ✅ success
double-onboard-e2e ✅ success
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-dashboard-e2e ✅ success
hermes-discord-e2e ✅ success
hermes-e2e ✅ success
hermes-inference-switch-e2e ✅ success
hermes-onboard-security-posture-e2e ✅ success
hermes-root-entrypoint-smoke-e2e ✅ success
hermes-slack-e2e ✅ success
inference-routing-e2e ✅ success
issue-2478-crash-loop-recovery-e2e ✅ success
issue-3600-gpu-proof-optional-e2e ✅ success
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
network-policy-e2e ✅ success
onboard-negative-paths-e2e ✅ success
onboard-repair-e2e ✅ success
onboard-resume-e2e ✅ success
openclaw-discord-pairing-e2e ✅ success
openclaw-inference-switch-e2e ✅ success
openclaw-onboard-security-posture-e2e ✅ success
openclaw-slack-pairing-e2e ✅ success
openclaw-tui-chat-correlation-e2e ❌ failure
openshell-gateway-upgrade-e2e ✅ success
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ✅ success
rebuild-hermes-stale-base-e2e ✅ success
rebuild-openclaw-e2e ✅ success
runtime-overrides-e2e ✅ success
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ✅ success
sessions-agents-cli-e2e ✅ success
shields-config-e2e ✅ success
skill-agent-e2e ✅ success
snapshot-commands-e2e ✅ success
state-backup-restore-e2e ✅ success
telegram-injection-e2e ✅ success
token-rotation-e2e ✅ success
tunnel-lifecycle-e2e ✅ success
upgrade-stale-sandbox-e2e ✅ success
vm-driver-privileged-exec-routing-e2e ✅ success

Failed jobs: openclaw-tui-chat-correlation-e2e. Check run artifacts for logs.

2 similar comments
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Selective E2E Results — ❌ Some jobs failed

Run: 26957346522
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: all (no filter)
Summary: 55 passed, 1 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ✅ success
brave-search-e2e ✅ success
channels-add-remove-e2e ✅ success
channels-stop-start-e2e ✅ success
cloud-e2e ✅ success
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
credential-migration-e2e ✅ success
credential-sanitization-e2e ✅ success
device-auth-health-e2e ✅ success
diagnostics-e2e ✅ success
docs-validation-e2e ✅ success
double-onboard-e2e ✅ success
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-dashboard-e2e ✅ success
hermes-discord-e2e ✅ success
hermes-e2e ✅ success
hermes-inference-switch-e2e ✅ success
hermes-onboard-security-posture-e2e ✅ success
hermes-root-entrypoint-smoke-e2e ✅ success
hermes-slack-e2e ✅ success
inference-routing-e2e ✅ success
issue-2478-crash-loop-recovery-e2e ✅ success
issue-3600-gpu-proof-optional-e2e ✅ success
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
network-policy-e2e ✅ success
onboard-negative-paths-e2e ✅ success
onboard-repair-e2e ✅ success
onboard-resume-e2e ✅ success
openclaw-discord-pairing-e2e ✅ success
openclaw-inference-switch-e2e ✅ success
openclaw-onboard-security-posture-e2e ✅ success
openclaw-slack-pairing-e2e ✅ success
openclaw-tui-chat-correlation-e2e ❌ failure
openshell-gateway-upgrade-e2e ✅ success
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ✅ success
rebuild-hermes-stale-base-e2e ✅ success
rebuild-openclaw-e2e ✅ success
runtime-overrides-e2e ✅ success
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ✅ success
sessions-agents-cli-e2e ✅ success
shields-config-e2e ✅ success
skill-agent-e2e ✅ success
snapshot-commands-e2e ✅ success
state-backup-restore-e2e ✅ success
telegram-injection-e2e ✅ success
token-rotation-e2e ✅ success
tunnel-lifecycle-e2e ✅ success
upgrade-stale-sandbox-e2e ✅ success
vm-driver-privileged-exec-routing-e2e ✅ success

Failed jobs: openclaw-tui-chat-correlation-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Selective E2E Results — ❌ Some jobs failed

Run: 26957346522
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: all (no filter)
Summary: 55 passed, 1 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ✅ success
brave-search-e2e ✅ success
channels-add-remove-e2e ✅ success
channels-stop-start-e2e ✅ success
cloud-e2e ✅ success
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
credential-migration-e2e ✅ success
credential-sanitization-e2e ✅ success
device-auth-health-e2e ✅ success
diagnostics-e2e ✅ success
docs-validation-e2e ✅ success
double-onboard-e2e ✅ success
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-dashboard-e2e ✅ success
hermes-discord-e2e ✅ success
hermes-e2e ✅ success
hermes-inference-switch-e2e ✅ success
hermes-onboard-security-posture-e2e ✅ success
hermes-root-entrypoint-smoke-e2e ✅ success
hermes-slack-e2e ✅ success
inference-routing-e2e ✅ success
issue-2478-crash-loop-recovery-e2e ✅ success
issue-3600-gpu-proof-optional-e2e ✅ success
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
network-policy-e2e ✅ success
onboard-negative-paths-e2e ✅ success
onboard-repair-e2e ✅ success
onboard-resume-e2e ✅ success
openclaw-discord-pairing-e2e ✅ success
openclaw-inference-switch-e2e ✅ success
openclaw-onboard-security-posture-e2e ✅ success
openclaw-slack-pairing-e2e ✅ success
openclaw-tui-chat-correlation-e2e ❌ failure
openshell-gateway-upgrade-e2e ✅ success
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ✅ success
rebuild-hermes-stale-base-e2e ✅ success
rebuild-openclaw-e2e ✅ success
runtime-overrides-e2e ✅ success
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ✅ success
sessions-agents-cli-e2e ✅ success
shields-config-e2e ✅ success
skill-agent-e2e ✅ success
snapshot-commands-e2e ✅ success
state-backup-restore-e2e ✅ success
telegram-injection-e2e ✅ success
token-rotation-e2e ✅ success
tunnel-lifecycle-e2e ✅ success
upgrade-stale-sandbox-e2e ✅ success
vm-driver-privileged-exec-routing-e2e ✅ success

Failed jobs: openclaw-tui-chat-correlation-e2e. Check run artifacts for logs.

@cv cv added v0.0.60 Release target and removed v0.0.59 Release target labels Jun 4, 2026
…messaging-enrollment

# Conflicts:
#	src/lib/actions/sandbox/policy-channel.ts
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/lib/actions/sandbox/policy-channel-conflict.test.ts (1)

57-57: 💤 Low value

Optional cleanup: spies array is never populated.

The spies array is declared but never receives any spy instances, so the loop in afterEach (line 176) never executes. All mocks are already restored via vi.restoreAllMocks() at line 175.

🧹 Optional cleanup

Remove the unused array and loop:

-let spies: MockInstance[];
 let logSpy: MockInstance;
 afterEach(() => {
   vi.restoreAllMocks();
-  for (const s of spies) s.mockRestore();
   delete process.env.NEMOCLAW_NON_INTERACTIVE;

Also applies to: 176-176

🤖 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/policy-channel-conflict.test.ts` at line 57, Remove
the unused `spies: MockInstance[]` declaration and the associated cleanup loop
in the `afterEach` block (which currently runs after `vi.restoreAllMocks()`),
since no spy instances are ever pushed into `spies`; simply rely on
`vi.restoreAllMocks()` to restore mocks and delete the `spies` variable and its
loop to clean up dead code.
🤖 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/actions/sandbox/policy-channel-conflict.test.ts`:
- Line 57: Remove the unused `spies: MockInstance[]` declaration and the
associated cleanup loop in the `afterEach` block (which currently runs after
`vi.restoreAllMocks()`), since no spy instances are ever pushed into `spies`;
simply rely on `vi.restoreAllMocks()` to restore mocks and delete the `spies`
variable and its loop to clean up dead code.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 522cf2f4-7be9-4c77-9e93-7c80743d27b1

📥 Commits

Reviewing files that changed from the base of the PR and between 0538b97 and d5cc5d1.

📒 Files selected for processing (8)
  • scripts/install.sh
  • src/lib/actions/sandbox/policy-channel-conflict.test.ts
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/actions/sandbox/rebuild.ts
  • src/lib/onboard.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • test/e2e/test-channels-add-remove.sh
🚧 Files skipped from review as they are similar to previous changes (6)
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • scripts/install.sh
  • src/lib/onboard/machine/handlers/sandbox.ts
  • test/e2e/test-channels-add-remove.sh
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/onboard.ts

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 5, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 27008013586
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: channels-add-remove-e2e,channels-stop-start-e2e,openclaw-tui-chat-correlation-e2e,messaging-compatible-endpoint-e2e
Summary: 4 passed, 0 failed, 0 skipped

Job Result
channels-add-remove-e2e ✅ success
channels-stop-start-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
openclaw-tui-chat-correlation-e2e ✅ success

@cv cv merged commit b46eb21 into main Jun 5, 2026
20 checks passed
@cv cv deleted the u/sdang/3896-phase-2-messaging-enrollment branch June 5, 2026 22:29
miyoungc added a commit that referenced this pull request Jun 6, 2026
## Summary
- Adds the `v0.0.60` section to `docs/about/release-notes.mdx` using the
dev announcement from discussion #4877.
- Fills the source-doc gaps found during release-prep review across
inference, policy tiers, command behavior, security boundaries, Hermes
dashboard/tooling, runtime context, and troubleshooting.
- Refreshes generated agent skills under `.agents/skills/` from the
current Fern docs output and upgrades Fern from `5.44.3` to `5.45.0`.

## Source summary
- #4037 -> `docs/reference/architecture.mdx`,
`docs/about/how-it-works.mdx`, `docs/about/release-notes.mdx`: Documents
system-only runtime context that stays out of visible chat.
- #4875 -> `docs/reference/architecture.mdx`,
`docs/about/how-it-works.mdx`, `docs/about/release-notes.mdx`: Documents
try-first sandbox network/filesystem guidance and clearer failure
classification.
- #4788 -> `docs/security/best-practices.mdx`,
`docs/about/release-notes.mdx`: Documents shared OpenClaw
device-approval policy for startup and connect.
- #4768 -> `docs/reference/network-policies.mdx`,
`docs/network-policy/integration-policy-examples.mdx`,
`docs/get-started/quickstart.mdx`,
`docs/get-started/quickstart-hermes.mdx`, `docs/reference/commands.mdx`:
Documents `weather`, `public-reference`, and Hermes managed-tool gateway
preset behavior.
- #3788 and #4864 -> `docs/reference/network-policies.mdx`,
`docs/reference/commands.mdx`: Documents non-interactive policy-tier
fail-fast behavior and interactive prompt fallback.
- #4756 and #4866 -> `docs/reference/commands.mdx`: Documents env-aware
default sandbox resolution for `list`, `status`, and `tunnel` commands.
- #4320 -> `docs/reference/commands.mdx`: Documents `$$nemoclaw tunnel
status` behavior.
- #4328 -> `docs/reference/commands.mdx`: Documents line-scoped policy
preset descriptions in `policy-list`.
- #4580 and #4748 -> `docs/reference/architecture.mdx`: Documents
package-managed OpenShell gateway service and Docker-driver
gateway-marker behavior.
- #4598 -> `docs/manage-sandboxes/lifecycle.mdx`: Documents concurrent
gateway/dashboard cleanup isolation by sandbox name and port.
- #4777 -> `docs/reference/troubleshooting.mdx`: Documents Docker GPU
patch rollback behavior.
- #4610 -> `docs/reference/troubleshooting.mdx`,
`docs/reference/commands.mdx`: Keeps mutable OpenClaw config permission
guidance aligned and removes skipped experimental wording.
- #4868 -> `docs/reference/commands.mdx`: Keeps `.dockerignore` handling
for custom `onboard --from <Dockerfile>` contexts in generated skills.
- #4870 -> `docs/reference/commands.mdx`,
`docs/manage-sandboxes/runtime-controls.mdx`: Documents
`NEMOCLAW_MINIMAL_BOOTSTRAP` and generated skill coverage.
- #4641 -> `docs/inference/inference-options.mdx`,
`docs/reference/troubleshooting.mdx`: Documents local NVIDIA NIM
platform-digest pulls and served-model id adoption.
- #4810 and #4867 -> `docs/inference/inference-options.mdx`: Documents
stable NGC managed-vLLM image lineage and DGX Station DeepSeek V4 Flash
coverage.
- #4852 -> `docs/inference/use-local-inference.mdx`,
`docs/reference/troubleshooting.mdx`: Documents Ollama model fit
filtering, 16K context floor, cold-load retry, and failed-model
exclusion.
- #4847 -> `docs/inference/switch-inference-providers.mdx`: Documents
API-family sync, Hermes `api_mode`, and Bedrock Runtime exception.
- #4800 -> `docs/inference/tool-calling-reliability.mdx`: Documents
Nemotron managed-inference native tool-search fallback.
- #4333 -> `docs/inference/switch-inference-providers.mdx`: Documents
interactive multimodal input prompting.
- #4086 -> `docs/reference/troubleshooting.mdx`: Keeps proxy bypass
normalization in generated troubleshooting coverage.
- #4811 and #4855 -> `docs/get-started/quickstart-hermes.mdx`: Documents
prebuilt Hermes dashboard assets and TUI recovery without runtime
rebuilds.
- #4854 -> `docs/inference/switch-inference-providers.mdx`,
`docs/reference/commands.mdx`: Documents Hermes proxy API-key
placeholder preservation during inference switches.
- #4248 -> `docs/manage-sandboxes/messaging-channels.mdx`,
`.agents/skills/`: Keeps messaging enrollment behavior aligned with
manifest-hook implementation.
- #4771 -> `docs/security/best-practices.mdx`,
`docs/security/credential-storage.mdx`: Documents Hermes
placeholder-only secret boundary for sandbox-visible runtime files.
- #4787 -> `docs/security/best-practices.mdx`,
`docs/about/release-notes.mdx`: Documents expanded memory scanner
examples for OpenAI project keys and Slack app-level tokens.
- #4848 -> `docs/reference/commands.mdx`: Documents OpenClaw skill
install mirroring into the agent home directory.
- #4790 -> `docs/about/release-notes.mdx`: Uses the prior release-prep
structure and generated `.agents/skills/` refresh as the template for
this release.

## Verification
- `python3 scripts/docs-to-skills.py docs/ .agents/skills/ --prefix
nemoclaw-user --doc-platform fern-mdx`
- `python3 scripts/docs-to-skills.py docs/ .agents/skills/ skills/
--prefix nemoclaw-user --doc-platform fern-mdx --dry-run`
- `npm run docs`
- `git diff --check`
- skip-term scan across `docs/`, `.agents/skills/`, and `skills/`
- `npm run build:cli`
- `npm run typecheck:cli`
- Commit and pre-push hook suites, including markdownlint, gitleaks,
env-var docs gate, docs-to-skills verification, and skills YAML tests

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

* **New Features**
* DeepSeek-V4-Flash now available as default inference model for DGX
Station.
* Hermes dashboard improved with dedicated port and OAuth-authenticated
tool gateway selection.
* Added weather and public-reference policy presets for expanded agent
capabilities.
* Enhanced Ollama model selection with GPU memory filtering and
automatic retry for timeouts.

* **Bug Fixes**
  * Improved policy tier validation to prevent invalid configurations.
* Better sandbox cleanup scoping by port to prevent conflicts across
deployments.
  * Added GPU patch failure recovery with automatic rollback.

* **Documentation**
* Expanded troubleshooting guides for inference, security, and sandbox
lifecycle.
  * Added .dockerignore best practices for custom deployments.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: integrations Third-party service integration behavior area: messaging Messaging channels, bridges, manifests, or channel lifecycle feature PR adds or expands user-visible functionality integration: discord Discord integration or channel behavior integration: slack Slack integration or channel behavior integration: telegram Telegram integration or channel behavior integration: whatsapp WhatsApp integration or channel behavior v0.0.60 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Phase 2: migrate messaging enrollment to manifest hooks

3 participants