Skip to content

refactor(messaging): derive channel support from manifests - #5777

Merged
cv merged 9 commits into
mainfrom
fix/messaging-channel-source-of-truth-deepagents
Jun 26, 2026
Merged

refactor(messaging): derive channel support from manifests#5777
cv merged 9 commits into
mainfrom
fix/messaging-channel-source-of-truth-deepagents

Conversation

@sandl99

@sandl99 sandl99 commented Jun 25, 2026

Copy link
Copy Markdown
Collaborator

Summary

Derive supported messaging agents and channels from channel manifests instead of agent manifests, so supportedAgents is the source of truth. This also removes artifact-only DeepAgents messaging wiring and rejects unsupported channel/agent pairs before policy, provider, credential, registry, or rebuild mutation.

Related Issue

Related PRs: #5743, #5673. Stacked on #5768, Fixes #5729

Acceptance Note

DeepAgents messaging is intentionally fail-closed in this PR. NemoClaw does not claim Discord, Telegram, Slack, or other channel delivery for LangChain Deep Agents Code until a real DeepAgents messaging bridge exists. The fix for #5729 is to reject unsupported DeepAgents channel setup before policy, credential, registry, rebuild, or Dockerfile mutation, instead of injecting a stale messaging plan into a sandbox that cannot consume inbound channel traffic.

Changes

  • Remove messaging_platforms parsing from agent manifests and derive available channels from channel manifest supportedAgents.
  • Remove DeepAgents messaging build/runtime artifacts until a real messaging bridge exists.
  • Gate channels add, channels list, onboard filtering, and rebuild staging from manifest-derived channel support.
  • Update regression tests for DeepAgents rejection, stale messaging cleanup, rebuild skipping, and manifest helper behavior.
  • Update platform-support docs to reference channel manifest supportedAgents.

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

  • 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
  • Targeted tests pass for changed behavior
  • Full npm test passes (broad runtime changes only)
  • Tests added or updated for new or changed behavior
  • 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 (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

  • Bug Fixes
    • Messaging channel availability is now derived from each channel manifest’s supportedAgents, improving enable/disable, rebuild planning, and channel status matching.
    • DeepAgents startup and rebuild no longer include unsupported messaging runtime wiring, env handling, or messaging artifacts.
    • Channel add/cleanup gates now reject unsupported agent/channel pairs earlier with clearer “channel-supported agents” guidance.
  • Documentation
    • Updated platform support and DeepAgents eligibility guidance to make supportedAgents the single source of truth for messaging support.

@sandl99 sandl99 self-assigned this Jun 25, 2026
@coderabbitai

coderabbitai Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 18347cc3-91f2-4c3b-b605-fbed23313ebe

📥 Commits

Reviewing files that changed from the base of the PR and between 0d11c92 and 3db8a3b.

📒 Files selected for processing (3)
  • src/lib/actions/sandbox/snapshot.test.ts
  • src/lib/actions/sandbox/snapshot.ts
  • test/langchain-deepagents-code-image.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/lib/actions/sandbox/snapshot.ts
  • test/langchain-deepagents-code-image.test.ts

📝 Walkthrough

Walkthrough

The PR moves messaging support declarations to channel manifests, removes agent-level messaging platform fields, and updates sandbox, onboarding, rebuild, DeepAgents runtime, docs, and tests to use manifest-derived support data.

Changes

Messaging support and runtime cleanup

Layer / File(s) Summary
Manifest support helpers
src/lib/messaging/manifest/types.ts, src/lib/messaging/utils*.ts, .agents/skills/nemoclaw-contributor-onboard-messaging-channel/SKILL.md, src/lib/messaging/AGENTS.md, ci/platform-matrix.json, docs/reference/platform-support.mdx, test/skills-frontmatter.test.ts
MessagingAgentId, helper functions, tests, and references now derive supported agents and channels from channel manifests and point channel support at supportedAgents.
Agent manifest cleanup
agents/*/manifest.yaml, src/lib/agent/defs.ts, src/lib/agent/*.test.ts, src/lib/agent/*fixtures.ts
AgentDefinition and the OpenClaw, Hermes, and DeepAgents manifests stop declaring messaging_platforms, and the agent fixture tests remove the field from mocked agents.
Sandbox channel gating
src/lib/actions/sandbox/channel-status*.ts, src/lib/actions/sandbox/policy-channel*.ts, test/channels-add-deepagents-rejection.test.ts
Sandbox channel status and add/remove validation now compare agents against channel-manifest supportedAgents, and the tests assert the updated rejection text and gating boundaries.
Rebuild and onboarding resolution
src/lib/actions/sandbox/rebuild.ts, src/lib/actions/sandbox/rebuild*.test.ts, src/lib/onboard/messaging-*.ts, src/lib/onboard/machine/handlers/sandbox*.ts
Rebuild staging and onboarding flows derive supported channels from built-in manifests, and the tests update skip, stage, and fixture expectations.
DeepAgents runtime pruning
agents/langchain-deepagents-code/Dockerfile, agents/langchain-deepagents-code/start.sh, src/lib/messaging/applier/build/messaging-build-applier.mts, src/lib/messaging/channels/*/manifest.ts, test/langchain-deepagents-code-image.test.ts, test/messaging-build-applier.test.ts
DeepAgents build, manifest render, and startup paths stop wiring the messaging plan and env artifacts, and the image/applier tests remove the old DeepAgents render contract.
Sandbox probe and startup tests
src/lib/actions/sandbox/snapshot*.ts, test/hermes-*.test.ts, test/sandbox-init.test.ts
Sandbox probe matching, Hermes startup fixtures, and sandbox resource-limit tests update process detection, permission capture, API key values, and the Darwin nproc limit.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~90+ minutes

Possibly related PRs

  • NVIDIA/NemoClaw#5585: Updates the same agent manifest messaging support blocks that this PR removes in favor of channel-manifest supportedAgents.
  • NVIDIA/NemoClaw#5673: Touches the same messaging availability helpers in src/lib/messaging/utils.ts and related gating behavior.
  • NVIDIA/NemoClaw#5743: Modifies the same sandbox channel-gating paths in src/lib/actions/sandbox/policy-channel.ts and related tests.

Suggested labels

area: onboarding

Suggested reviewers

  • prekshivyas
  • cv

Poem

A bunny hopped through manifest fields,
Where supportedAgents now clearly yields.
No old plan strings in sight,
Just tidy paths and tests in light,
Hop hop—messaging carrots reaped from fields 🐰

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning Some unrelated changes appear, such as the sandbox-init nprocLimit tweak and other non-messaging test edits. Remove unrelated sandbox-init and other non-messaging edits, or split them into a separate PR.
Docstring Coverage ⚠️ Warning Docstring coverage is 4.35% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Clear, concise title that matches the main manifest-based messaging refactor.
Linked Issues check ✅ Passed The PR rejects unsupported DeepAgents channel additions before rebuild-time mutation, addressing the missing NEMOCLAW_MESSAGING_PLAN_B64 failure.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/messaging-channel-source-of-truth-deepagents

Comment @coderabbitai help to get the list of available commands.

@github-code-quality

github-code-quality Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in the fix/messaging-channe... branch is 96%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main fix/messaging-channe... 3db8a3b +/-
nemoclaw/src/se...cret-scanner.ts 100%
nemoclaw/src/commands/slash.ts 100%
nemoclaw/src/li...bprocess-env.ts 100%
nemoclaw/src/bl...eprint/state.ts 98%
nemoclaw/src/onboard/config.ts 98%
nemoclaw/src/bl...int/snapshot.ts 97%
nemoclaw/src/bl...print/runner.ts 95%
nemoclaw/src/co...ration-state.ts 94%
nemoclaw/src/bl...ate-networks.ts 94%
nemoclaw/src/index.ts 94%

TypeScript / code-coverage/cli

The overall coverage in the fix/messaging-channe... branch is 47%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main fix/messaging-channe... 3db8a3b +/-
src/lib/state/o...oard-session.ts 91%
src/lib/inference/local.ts 76%
src/lib/actions...dbox/rebuild.ts 72%
src/lib/sandbox/config.ts 72%
src/lib/onboard/preflight.ts 62%
src/lib/actions...licy-channel.ts 60%
src/lib/state/sandbox.ts 56%
src/lib/policy/index.ts 49%
src/lib/onboard...er-gpu-patch.ts 47%
src/lib/onboard.ts 19%

Updated June 26, 2026 03:15 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@sandl99
sandl99 changed the base branch from fix/deepagents-terminal-ready-detach to main June 25, 2026 06:58
@github-actions

github-actions Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Changes requested

Merge posture: Do not merge yet
Primary next action: Resolve or justify PRA-1: Literal #5729 expected result is still replaced by fail-closed DeepAgents messaging.
Open items: 0 required · 1 warning · 0 suggestions · 8 test follow-ups
Since last review: 0 prior items resolved · 1 still applies · 0 new items found

Action checklist

  • PRA-1 Resolve or justify: Literal [Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64" #5729 expected result is still replaced by fail-closed DeepAgents messaging
  • PRA-T1 Add or justify test follow-up: Runtime validation
  • PRA-T2 Add or justify test follow-up: Runtime validation
  • PRA-T3 Add or justify test follow-up: Runtime validation
  • PRA-T4 Add or justify test follow-up: Acceptance clause
  • PRA-T5 Add or justify test follow-up: Acceptance clause
  • PRA-T6 Add or justify test follow-up: Acceptance clause
  • PRA-T7 Add or justify test follow-up: Acceptance clause
  • PRA-T8 Add or justify test follow-up: Acceptance clause

Findings index

ID Severity Category Location Required action
PRA-1 Resolve/justify acceptance Either record maintainer acceptance that #5729 is resolved by fail-closed unsupported DeepAgents messaging, or change this PR to implement a real DeepAgents bridge/build/runtime path and channel-ready rebuild behavior for Discord, Telegram, or Slack. Keep the current early rejection if unsupported behavior is the intended product scope.
Review findings by urgency: 0 required fixes, 1 item to resolve/justify, 0 in-scope improvements

⚠️ Resolve or justify before merge

Investigate these in the current review; either fix them, explain why they are not applicable, or document the accepted risk.

PRA-1 Resolve/justify — Literal #5729 expected result is still replaced by fail-closed DeepAgents messaging

  • Location: not file-specific
  • Category: acceptance
  • Problem: Issue [Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64" #5729's Expected Result says: "Messaging plan is injected into the DeepAgents Dockerfile during rebuild; sandbox recreates successfully with the Discord (or Telegram/Slack) channel configured and Ready." This PR instead removes the DeepAgents messaging Dockerfile/startup artifacts and rejects unsupported DeepAgents channel setup before policy, provider, credential, registry, OpenShell, or rebuild mutation. The fail-closed behavior is safer and now documented, but it is not the literal channel-ready behavior requested by the linked issue.
  • Impact: If maintainers intend [Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64" #5729 to deliver working Discord, Telegram, or Slack delivery for LangChain Deep Agents Code, this PR prevents the destructive rebuild failure but leaves the requested capability unavailable. That can create release-note/support ambiguity unless the issue is explicitly accepted as fixed by unsupported-agent fail-closed behavior.
  • Recommended action: Either record maintainer acceptance that [Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64" #5729 is resolved by fail-closed unsupported DeepAgents messaging, or change this PR to implement a real DeepAgents bridge/build/runtime path and channel-ready rebuild behavior for Discord, Telegram, or Slack. Keep the current early rejection if unsupported behavior is the intended product scope.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Read [Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64" #5729's Expected Result, then inspect `agents/langchain-deepagents-code/Dockerfile` for the absence of `NEMOCLAW_MESSAGING_PLAN_B64` and `messaging-build-applier.mts`, and inspect `test/channels-add-deepagents-rejection.test.ts` for the `channels add discord` non-mutation assertion.
  • Missing regression test: Existing tests prove the fail-closed path. If the literal issue requirement is accepted instead, add an automated DeepAgents `channels add discord` or `channels add telegram/slack` plus rebuild acceptance test that verifies the channel is configured and the sandbox reaches Ready.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Read [Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64" #5729's Expected Result, then inspect `agents/langchain-deepagents-code/Dockerfile` for the absence of `NEMOCLAW_MESSAGING_PLAN_B64` and `messaging-build-applier.mts`, and inspect `test/channels-add-deepagents-rejection.test.ts` for the `channels add discord` non-mutation assertion.
  • Evidence: `agents/langchain-deepagents-code/Dockerfile` removes `ARG NEMOCLAW_MESSAGING_PLAN_B64`, the messaging env, `COPY src/lib/messaging/`, and the build applier invocation; `agents/langchain-deepagents-code/start.sh` removes messaging env loading; `test/channels-add-deepagents-rejection.test.ts` asserts unsupported DeepAgents `channels add discord` exits before policy/provider/credential/registry/OpenShell/rebuild side effects.

💡 In-scope improvements

These are lower-risk, not throwaway. Prefer fixing them in this PR when they are local to changed code; defer only with rationale or a linked follow-up.

  • None.
Test follow-ups to resolve or justify

If these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.

  • PRA-T1 Runtime validation — Create or rebuild a LangChain Deep Agents Code sandbox with stale stored messaging plan state and `NEMOCLAW_MESSAGING_PLAN_B64` present; verify the Docker build receives no messaging arg, does not invoke `messaging-build-applier.mts`, the sandbox reaches Ready, and the no-command entrypoint remains the foreground `tail -f /dev/null` keepalive.. Static and unit coverage is strong for manifest-derived support, fail-closed channel add, stale plan cleanup, onboard/resume filtering, rebuild staging, and DeepAgents artifact removal. The PR also changes Dockerfile/startup/rebuild contracts across the real Docker/OpenShell sandbox boundary, so targeted runtime validation would improve confidence without relying on external E2E status.
  • PRA-T2 Runtime validation — Run DeepAgents onboard/resume with `TELEGRAM_BOT_TOKEN`, `DISCORD_BOT_TOKEN`, `SLACK_BOT_TOKEN`, and `SLACK_APP_TOKEN` present; verify no messaging channel is selected, no messaging plan persists to session/registry, and sandbox creation receives an empty messaging channel list.. Static and unit coverage is strong for manifest-derived support, fail-closed channel add, stale plan cleanup, onboard/resume filtering, rebuild staging, and DeepAgents artifact removal. The PR also changes Dockerfile/startup/rebuild contracts across the real Docker/OpenShell sandbox boundary, so targeted runtime validation would improve confidence without relying on external E2E status.
  • PRA-T3 Runtime validation — If maintainers require [Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64" #5729's literal expected behavior rather than fail-closed unsupported behavior, add a DeepAgents `channels add discord` or `channels add telegram/slack` plus rebuild acceptance test that verifies the channel is configured and the sandbox reaches Ready.. Static and unit coverage is strong for manifest-derived support, fail-closed channel add, stale plan cleanup, onboard/resume filtering, rebuild staging, and DeepAgents artifact removal. The PR also changes Dockerfile/startup/rebuild contracts across the real Docker/OpenShell sandbox boundary, so targeted runtime validation would improve confidence without relying on external E2E status.
  • PRA-T4 Acceptance clause — [Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64" — add test evidence or identify existing coverage. The failing rebuild path is avoided by rejecting DeepAgents channel setup early. The Dockerfile does not add the missing ARG; it removes unsupported messaging build artifacts instead.
  • PRA-T5 Acceptance clause — The `langchain-deepagents-code/Dockerfile` in NemoClaw v0.0.67 does not declare `ARG NEMOCLAW_MESSAGING_PLAN_B64`, which is required by `dockerfile-patch.js:200` to inject the messaging configuration at Docker build time. — add test evidence or identify existing coverage. The PR does not declare the ARG. It removes artifact-only messaging injection from `agents/langchain-deepagents-code/Dockerfile` and prevents unsupported DeepAgents plans from reaching Dockerfile patching.
  • PRA-T6 Acceptance clause — 1. Install NemoClaw v0.0.67 with DeepAgents agent (non-interactive): — add test evidence or identify existing coverage. Static and unit coverage verifies current DeepAgents onboard/resume filtering, but no real non-interactive installer/runtime validation is included in this PR.
  • PRA-T7 Acceptance clause — 2. Confirm sandbox is Ready: `nemoclaw da-test status` — add test evidence or identify existing coverage. Read-only review did not execute a real DeepAgents sandbox lifecycle. Static tests assert the entrypoint keeps DeepAgents idling with `tail -f /dev/null`.
  • PRA-T8 Acceptance clause — Messaging plan is injected into the DeepAgents Dockerfile during rebuild; sandbox recreates successfully with the Discord (or Telegram/Slack) channel configured and Ready. — add test evidence or identify existing coverage. The literal behavior is not implemented. `agents/langchain-deepagents-code/Dockerfile` no longer accepts or applies a messaging plan, and `channels add` for DeepAgents exits before rebuild.
Since last review details

Current findings, using the urgency labels above:

PRA-1 Resolve/justify — Literal #5729 expected result is still replaced by fail-closed DeepAgents messaging

  • Location: not file-specific
  • Category: acceptance
  • Problem: Issue [Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64" #5729's Expected Result says: "Messaging plan is injected into the DeepAgents Dockerfile during rebuild; sandbox recreates successfully with the Discord (or Telegram/Slack) channel configured and Ready." This PR instead removes the DeepAgents messaging Dockerfile/startup artifacts and rejects unsupported DeepAgents channel setup before policy, provider, credential, registry, OpenShell, or rebuild mutation. The fail-closed behavior is safer and now documented, but it is not the literal channel-ready behavior requested by the linked issue.
  • Impact: If maintainers intend [Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64" #5729 to deliver working Discord, Telegram, or Slack delivery for LangChain Deep Agents Code, this PR prevents the destructive rebuild failure but leaves the requested capability unavailable. That can create release-note/support ambiguity unless the issue is explicitly accepted as fixed by unsupported-agent fail-closed behavior.
  • Recommended action: Either record maintainer acceptance that [Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64" #5729 is resolved by fail-closed unsupported DeepAgents messaging, or change this PR to implement a real DeepAgents bridge/build/runtime path and channel-ready rebuild behavior for Discord, Telegram, or Slack. Keep the current early rejection if unsupported behavior is the intended product scope.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Read [Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64" #5729's Expected Result, then inspect `agents/langchain-deepagents-code/Dockerfile` for the absence of `NEMOCLAW_MESSAGING_PLAN_B64` and `messaging-build-applier.mts`, and inspect `test/channels-add-deepagents-rejection.test.ts` for the `channels add discord` non-mutation assertion.
  • Missing regression test: Existing tests prove the fail-closed path. If the literal issue requirement is accepted instead, add an automated DeepAgents `channels add discord` or `channels add telegram/slack` plus rebuild acceptance test that verifies the channel is configured and the sandbox reaches Ready.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Read [Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64" #5729's Expected Result, then inspect `agents/langchain-deepagents-code/Dockerfile` for the absence of `NEMOCLAW_MESSAGING_PLAN_B64` and `messaging-build-applier.mts`, and inspect `test/channels-add-deepagents-rejection.test.ts` for the `channels add discord` non-mutation assertion.
  • Evidence: `agents/langchain-deepagents-code/Dockerfile` removes `ARG NEMOCLAW_MESSAGING_PLAN_B64`, the messaging env, `COPY src/lib/messaging/`, and the build applier invocation; `agents/langchain-deepagents-code/start.sh` removes messaging env loading; `test/channels-add-deepagents-rejection.test.ts` asserts unsupported DeepAgents `channels add discord` exits before policy/provider/credential/registry/OpenShell/rebuild side effects.

Workflow run details

This is an automated, non-binding review; it still expects maintainers and agents to respond to each required or warning item. Treat suggestions as current-PR improvements when they touch changed code; defer only with maintainer rationale or a linked follow-up. A human maintainer must make the final merge decision.

@github-actions

github-actions Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: onboard-resume-e2e, onboard-repair-e2e, cloud-onboard-e2e, channels-add-remove-e2e, channels-stop-start-openclaw-e2e, channels-stop-start-hermes-e2e, messaging-providers-e2e, rebuild-openclaw-e2e, rebuild-hermes-e2e, ubuntu-repo-cloud-langchain-deepagents-code
Optional E2E: diagnostics-e2e, hermes-e2e, sandbox-rebuild-e2e, network-policy-e2e

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • onboard-resume-e2e (medium): Required by the onboarding resume compatibility rule: src/lib/onboard/machine/handlers/sandbox.ts changes live sandbox-state resume decisions, messaging-plan filtering, and session updates.
  • onboard-repair-e2e (medium): Required by the onboarding resume compatibility rule: the sandbox state handler can affect repair backstops and nonterminal onboarding recovery when messaging or sandbox reuse state changes.
  • cloud-onboard-e2e (medium): Full hosted onboarding can be affected by the sandbox state handler, messaging setup/state changes, agent manifest capability discovery, and OpenClaw/Hermes manifest contract changes.
  • channels-add-remove-e2e (high): The PR changes channel support gating, policy-channel mutations, credential/policy ordering, and manifest-derived availability. This E2E exercises real channels add/remove, rebuild, credential reuse, and policy-list behavior.
  • channels-stop-start-openclaw-e2e (high): policy-channel pause/resume and stale-plan cleanup behavior changed. The OpenClaw stop/start shard validates disabled-channel persistence and credential reattachment across rebuild for real channel lifecycle operations.
  • channels-stop-start-hermes-e2e (high): Hermes no longer declares messaging support in its agent manifest; channel support is now manifest-derived. The Hermes stop/start shard validates that Hermes channel pause/resume and rebuild persistence still work.
  • messaging-providers-e2e (high): Messaging setup, manifest registry/types, and channel manifests changed. This validates provider creation, placeholder redaction, credential isolation, config patching, and L7 proxy token rewriting for messaging channels.
  • rebuild-openclaw-e2e (high): src/lib/actions/sandbox/rebuild.ts and OpenClaw manifest support behavior changed. This validates real OpenClaw rebuild, messaging plan staging, registry state, and backup hygiene.
  • rebuild-hermes-e2e (high): Hermes manifest messaging support was removed in favor of channel manifests and rebuild messaging staging changed. This validates the Hermes rebuild path, messaging placeholders, registry state, and backup hygiene.
  • ubuntu-repo-cloud-langchain-deepagents-code (high): Deep Agents Code Dockerfile, manifest, and start.sh changed. Run the existing live scenario to verify hosted onboarding, dcode runtime readiness, inference.local, terminal-agent behavior, and Deep Agents policy/egress checks in a real sandbox.

Optional E2E

  • diagnostics-e2e (medium): Useful adjacent coverage because channel-status now consults the channel manifest registry for agent support. Not as merge-blocking as lifecycle/add/remove/rebuild tests unless diagnostics are a PR focus.
  • hermes-e2e (high): General Hermes onboarding smoke is useful because the Hermes manifest contract changed, though rebuild-hermes-e2e and channels-stop-start-hermes-e2e provide more targeted coverage for this PR.
  • sandbox-rebuild-e2e (high): Generic sandbox rebuild coverage is useful because rebuild and snapshot code changed, but OpenClaw/Hermes rebuild jobs are the more direct required checks.
  • network-policy-e2e (medium): Optional confidence for policy side effects of channel add/remove and manifest-derived policy presets; no policy YAML changed directly.

New E2E recommendations

  • Deep Agents Code messaging rejection (high): The PR intentionally fails closed for Deep Agents Code messaging by deriving support from channel manifests and removing Deep Agents messaging render/env wiring. Existing unit tests cover rejection, but there is no focused live E2E that onboards a Deep Agents sandbox and verifies channels add fails before policy, credential, provider, registry, or rebuild mutations.
    • Suggested test: deepagents-channels-rejection-e2e
  • Manifest-derived channel availability migration (medium): Agent manifests no longer declare messaging_platforms. A focused E2E that compares channels add/status availability for OpenClaw, Hermes, and an unsupported agent against channel manifest supportedAgents would catch future drift between agent manifests, docs, and runtime gating.
    • Suggested test: channel-manifest-availability-e2e

@github-actions

github-actions Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Recommendation

Required Vitest E2E scenarios: onboard-resume-vitest, onboard-repair-vitest, channels-add-remove-vitest, channels-stop-start-vitest, messaging-providers-vitest, ubuntu-repo-cloud-langchain-deepagents-code
Optional Vitest E2E scenarios: hermes-discord-vitest, hermes-slack-vitest

Dispatch required Vitest E2E scenarios:

  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=onboard-resume-vitest
  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=onboard-repair-vitest
  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=channels-add-remove-vitest
  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=channels-stop-start-vitest
  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=messaging-providers-vitest
  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-langchain-deepagents-code

Workflow run

Full Vitest E2E advisor summary

Vitest E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required Vitest E2E scenarios

  • onboard-resume-vitest: Required by the onboarding resume compatibility rule: src/lib/onboard/machine/handlers/sandbox.ts changes sandbox live-slice orchestration, persisted messaging-plan filtering, and resume reuse/recreate decisions.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=onboard-resume-vitest
  • onboard-repair-vitest: Required with onboard-resume for this state-machine path because the changed sandbox handler also gates recorded-sandbox cleanup and repair/backstop events from persisted sessions.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=onboard-repair-vitest
  • channels-add-remove-vitest: Covers the changed messaging channel add/remove gate, supportedAgents-derived channel availability, registry cleanup, provider reuse, policy application, and rebuild handoff for OpenClaw channels.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=channels-add-remove-vitest
  • channels-stop-start-vitest: Exercises changed channel pause/resume and persisted-plan filtering across OpenClaw/Hermes channel stop/start and rebuild flows after moving availability from agent manifests to channel manifests.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=channels-stop-start-vitest
  • messaging-providers-vitest: Validates the manifest-first messaging provider plan, placeholder redaction, and QR/provider parity affected by changes to messaging manifest types, channel manifests, setup, and agent availability logic.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=messaging-providers-vitest
  • ubuntu-repo-cloud-langchain-deepagents-code: Live-supported typed scenario for the changed LangChain Deep Agents Code Dockerfile, manifest, start script, and fail-closed messaging support behavior.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-langchain-deepagents-code

Optional Vitest E2E scenarios

  • hermes-discord-vitest: Adjacent Hermes-specific channel coverage for the Discord supportedAgents migration and Hermes manifest removal of messaging_platforms; channels-stop-start provides the primary cross-agent gate.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=hermes-discord-vitest
  • hermes-slack-vitest: Adjacent Hermes-specific Slack coverage for the supportedAgents migration and Hermes channel config path; useful if reviewers want per-channel Hermes confidence beyond the required generic channel jobs.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=hermes-slack-vitest

Relevant changed files

  • agents/hermes/manifest.yaml
  • agents/langchain-deepagents-code/Dockerfile
  • agents/langchain-deepagents-code/manifest.yaml
  • agents/langchain-deepagents-code/start.sh
  • agents/openclaw/manifest.yaml
  • src/lib/actions/sandbox/channel-status.ts
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/actions/sandbox/rebuild.ts
  • src/lib/actions/sandbox/snapshot.ts
  • src/lib/agent/defs.ts
  • src/lib/messaging/applier/build/messaging-build-applier.mts
  • src/lib/messaging/channels/discord/manifest.ts
  • src/lib/messaging/channels/slack/manifest.ts
  • src/lib/messaging/channels/telegram/manifest.ts
  • src/lib/messaging/manifest/types.ts
  • src/lib/messaging/utils.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • src/lib/onboard/messaging-channel-setup.ts
  • src/lib/onboard/messaging-state.ts

@sandl99 sandl99 changed the title fix(messaging): derive channel support from manifests refactor(messaging): derive channel support from manifests Jun 25, 2026
@sandl99 sandl99 added area: messaging Messaging channels, bridges, manifests, or channel lifecycle bug bug-fix PR fixes a bug or regression labels Jun 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

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/messaging/utils.ts (1)

52-60: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value

Inconsistent name trimming between helpers.

tryGetMessagingAgentId matches against the raw agent.name, while isMessagingChannelSupportedByAgent and getMessagingManifestAvailabilityContext trim it first. In getMessagingManifestAvailabilityContext the trimmed name guard passes for a whitespace-padded valid name (e.g. " openclaw "), but the subsequent tryGetMessagingAgentId(agent, ...) call sees the untrimmed value, fails to resolve, and produces a deny-all context (supportedChannelIds: []). Trimming here would keep resolution consistent.

♻️ Trim before matching
 export function tryGetMessagingAgentId(
   agent: MessagingAgentDescriptor | null | undefined,
   manifests: readonly ChannelManifest[],
 ): MessagingAgentId | null {
-  const name = agent?.name;
+  const name = typeof agent?.name === "string" ? agent.name.trim() : agent?.name;
   return (listSupportedMessagingAgentIds(manifests) as readonly string[]).includes(name ?? "")
     ? (name as MessagingAgentId)
     : null;
 }
🤖 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/utils.ts` around lines 52 - 60, `tryGetMessagingAgentId` is
matching against the raw `agent.name`, which is inconsistent with
`isMessagingChannelSupportedByAgent` and
`getMessagingManifestAvailabilityContext`; trim the agent name before checking
`listSupportedMessagingAgentIds(manifests)` so whitespace-padded valid names
resolve correctly. Update the `tryGetMessagingAgentId` helper to normalize
`agent.name` the same way as the other messaging helpers, ensuring
`getMessagingManifestAvailabilityContext` no longer falls back to an empty
`supportedChannelIds` for trimmed-valid names.
🤖 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/utils.ts`:
- Around line 52-60: `tryGetMessagingAgentId` is matching against the raw
`agent.name`, which is inconsistent with `isMessagingChannelSupportedByAgent`
and `getMessagingManifestAvailabilityContext`; trim the agent name before
checking `listSupportedMessagingAgentIds(manifests)` so whitespace-padded valid
names resolve correctly. Update the `tryGetMessagingAgentId` helper to normalize
`agent.name` the same way as the other messaging helpers, ensuring
`getMessagingManifestAvailabilityContext` no longer falls back to an empty
`supportedChannelIds` for trimmed-valid names.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 8fa16c98-828b-4f9d-8648-6a47051863ff

📥 Commits

Reviewing files that changed from the base of the PR and between e3b8325 and 696c75f.

📒 Files selected for processing (46)
  • .agents/skills/nemoclaw-contributor-onboard-messaging-channel/SKILL.md
  • agents/hermes/manifest.yaml
  • agents/langchain-deepagents-code/Dockerfile
  • agents/langchain-deepagents-code/manifest.yaml
  • agents/langchain-deepagents-code/start.sh
  • agents/openclaw/manifest.yaml
  • ci/platform-matrix.json
  • docs/reference/platform-support.mdx
  • src/lib/actions/sandbox/channel-status.test.ts
  • src/lib/actions/sandbox/channel-status.ts
  • src/lib/actions/sandbox/policy-channel-agent-gate.test.ts
  • src/lib/actions/sandbox/policy-channel-cleanup.test.ts
  • src/lib/actions/sandbox/policy-channel-conflict.test.ts
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/actions/sandbox/rebuild-flow.test.ts
  • src/lib/actions/sandbox/rebuild-messaging-stage.test.ts
  • src/lib/actions/sandbox/rebuild-resume-snapshot.test.ts
  • src/lib/actions/sandbox/rebuild.ts
  • src/lib/agent/base-image.test.ts
  • src/lib/agent/defs.test.ts
  • src/lib/agent/defs.ts
  • src/lib/agent/hermes-recovery-boundary-fixtures.ts
  • src/lib/agent/onboard.test.ts
  • src/lib/agent/runtime.test.ts
  • src/lib/messaging/AGENTS.md
  • src/lib/messaging/applier/build/messaging-build-applier.mts
  • src/lib/messaging/channels/discord/manifest.ts
  • src/lib/messaging/channels/slack/manifest.ts
  • src/lib/messaging/channels/telegram/manifest.ts
  • src/lib/messaging/manifest/registry.test.ts
  • src/lib/messaging/manifest/types.ts
  • src/lib/messaging/utils.test.ts
  • src/lib/messaging/utils.ts
  • src/lib/onboard.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • src/lib/onboard/messaging-channel-setup-fallback.test.ts
  • src/lib/onboard/messaging-channel-setup.ts
  • src/lib/onboard/messaging-state.test.ts
  • src/lib/onboard/messaging-state.ts
  • test/channels-add-deepagents-rejection.test.ts
  • test/dcode-start-keepalive.test.ts
  • test/langchain-deepagents-code-image.test.ts
  • test/messaging-build-applier.test.ts
  • test/onboard-terminal-dashboard.test.ts
  • test/skills-frontmatter.test.ts
💤 Files with no reviewable changes (16)
  • agents/langchain-deepagents-code/manifest.yaml
  • src/lib/agent/defs.test.ts
  • src/lib/agent/hermes-recovery-boundary-fixtures.ts
  • src/lib/actions/sandbox/policy-channel-cleanup.test.ts
  • src/lib/agent/runtime.test.ts
  • test/messaging-build-applier.test.ts
  • src/lib/actions/sandbox/rebuild-flow.test.ts
  • agents/hermes/manifest.yaml
  • src/lib/messaging/channels/slack/manifest.ts
  • src/lib/agent/base-image.test.ts
  • src/lib/messaging/channels/telegram/manifest.ts
  • agents/openclaw/manifest.yaml
  • src/lib/actions/sandbox/channel-status.test.ts
  • src/lib/agent/onboard.test.ts
  • src/lib/agent/defs.ts
  • src/lib/messaging/channels/discord/manifest.ts

@NVIDIA NVIDIA deleted a comment from github-actions Bot Jun 25, 2026
@NVIDIA NVIDIA deleted a comment from github-actions Bot Jun 25, 2026
@NVIDIA NVIDIA deleted a comment from github-actions Bot Jun 25, 2026
@NVIDIA NVIDIA deleted a comment from github-actions Bot Jun 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 28185525568
Target ref: fix/messaging-channel-source-of-truth-deepagents
Requested jobs: onboard-resume-e2e,onboard-repair-e2e,cloud-onboard-e2e,messaging-providers-e2e,channels-add-remove-e2e,channels-stop-start-openclaw-e2e,channels-stop-start-hermes-e2e,rebuild-openclaw-e2e,rebuild-hermes-e2e,hermes-discord-e2e,hermes-slack-e2e,telegram-injection-e2e,openclaw-discord-pairing-e2e,openclaw-slack-pairing-e2e,hermes-e2e
Summary: 15 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
channels-add-remove-e2e ✅ success
channels-stop-start-hermes-e2e ✅ success
channels-stop-start-openclaw-e2e ✅ success
cloud-onboard-e2e ✅ success
hermes-discord-e2e ✅ success
hermes-e2e ✅ success
hermes-slack-e2e ✅ success
messaging-providers-e2e ✅ success
onboard-repair-e2e ✅ success
onboard-resume-e2e ✅ success
openclaw-discord-pairing-e2e ✅ success
openclaw-slack-pairing-e2e ✅ success
rebuild-hermes-e2e ✅ success
rebuild-openclaw-e2e ✅ success
telegram-injection-e2e ✅ success

@jyaunches jyaunches added v0.0.69 and removed v0.0.68 labels Jun 25, 2026
@wscurran wscurran removed the bug label Jun 25, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/lib/actions/sandbox/snapshot.ts`:
- Around line 66-69: The awk-based process detection in snapshot creation is
matching any argv token, so plain arguments like file contents or grep targets
can falsely mark dcode as running. Tighten the matching in the snapshot logic
around the awk patterns in snapshot.ts so they only recognize the executable
position within ps args (for example, by anchoring to the start of the command
or after the PID/command boundary) and preserve the existing
python/deepagents_code detection while avoiding incidental matches from
arguments.

In `@test/langchain-deepagents-code-image.test.ts`:
- Around line 21-29: The `policyBinaryPaths` helper is silently normalizing
invalid `binaries[].path` values to an empty string, which can hide malformed
policy entries. Update `policyBinaryPaths` to fail fast by asserting each
`binaries` entry has a string `path` before returning paths, rather than mapping
non-string values to `""`. Keep the check close to `YAML.parse` and the
`network_policies[policyName].binaries` access so malformed
`policy-additions.yaml` shapes are rejected immediately.
🪄 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: 6302287b-bc73-4dce-b874-d3cf8a59b0cf

📥 Commits

Reviewing files that changed from the base of the PR and between 696c75f and a50f140.

📒 Files selected for processing (24)
  • agents/hermes/manifest.yaml
  • agents/langchain-deepagents-code/Dockerfile
  • agents/langchain-deepagents-code/manifest.yaml
  • agents/langchain-deepagents-code/start.sh
  • agents/openclaw/manifest.yaml
  • ci/platform-matrix.json
  • docs/reference/platform-support.mdx
  • src/lib/actions/sandbox/rebuild-flow.test.ts
  • src/lib/actions/sandbox/rebuild.ts
  • src/lib/actions/sandbox/snapshot.test.ts
  • src/lib/actions/sandbox/snapshot.ts
  • src/lib/agent/base-image.test.ts
  • src/lib/agent/defs.test.ts
  • src/lib/agent/defs.ts
  • src/lib/agent/hermes-recovery-boundary-fixtures.ts
  • src/lib/agent/onboard.test.ts
  • src/lib/agent/runtime.test.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard/messaging-channel-setup.ts
  • test/hermes-secret-boundary-api-key.test.ts
  • test/hermes-start.test.ts
  • test/langchain-deepagents-code-image.test.ts
  • test/sandbox-init.test.ts
  • test/skills-frontmatter.test.ts
💤 Files with no reviewable changes (1)
  • test/skills-frontmatter.test.ts
✅ Files skipped from review due to trivial changes (3)
  • ci/platform-matrix.json
  • docs/reference/platform-support.mdx
  • src/lib/agent/base-image.test.ts
🚧 Files skipped from review as they are similar to previous changes (14)
  • agents/openclaw/manifest.yaml
  • agents/hermes/manifest.yaml
  • src/lib/agent/defs.test.ts
  • src/lib/agent/hermes-recovery-boundary-fixtures.ts
  • src/lib/agent/onboard.test.ts
  • src/lib/onboard/messaging-channel-setup.ts
  • src/lib/actions/sandbox/rebuild-flow.test.ts
  • src/lib/agent/defs.ts
  • src/lib/agent/runtime.test.ts
  • agents/langchain-deepagents-code/manifest.yaml
  • agents/langchain-deepagents-code/start.sh
  • agents/langchain-deepagents-code/Dockerfile
  • src/lib/actions/sandbox/rebuild.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/lib/actions/sandbox/snapshot.ts`:
- Around line 66-69: The awk-based process detection in snapshot creation is
matching any argv token, so plain arguments like file contents or grep targets
can falsely mark dcode as running. Tighten the matching in the snapshot logic
around the awk patterns in snapshot.ts so they only recognize the executable
position within ps args (for example, by anchoring to the start of the command
or after the PID/command boundary) and preserve the existing
python/deepagents_code detection while avoiding incidental matches from
arguments.

In `@test/langchain-deepagents-code-image.test.ts`:
- Around line 21-29: The `policyBinaryPaths` helper is silently normalizing
invalid `binaries[].path` values to an empty string, which can hide malformed
policy entries. Update `policyBinaryPaths` to fail fast by asserting each
`binaries` entry has a string `path` before returning paths, rather than mapping
non-string values to `""`. Keep the check close to `YAML.parse` and the
`network_policies[policyName].binaries` access so malformed
`policy-additions.yaml` shapes are rejected immediately.
🪄 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: 6302287b-bc73-4dce-b874-d3cf8a59b0cf

📥 Commits

Reviewing files that changed from the base of the PR and between 696c75f and a50f140.

📒 Files selected for processing (24)
  • agents/hermes/manifest.yaml
  • agents/langchain-deepagents-code/Dockerfile
  • agents/langchain-deepagents-code/manifest.yaml
  • agents/langchain-deepagents-code/start.sh
  • agents/openclaw/manifest.yaml
  • ci/platform-matrix.json
  • docs/reference/platform-support.mdx
  • src/lib/actions/sandbox/rebuild-flow.test.ts
  • src/lib/actions/sandbox/rebuild.ts
  • src/lib/actions/sandbox/snapshot.test.ts
  • src/lib/actions/sandbox/snapshot.ts
  • src/lib/agent/base-image.test.ts
  • src/lib/agent/defs.test.ts
  • src/lib/agent/defs.ts
  • src/lib/agent/hermes-recovery-boundary-fixtures.ts
  • src/lib/agent/onboard.test.ts
  • src/lib/agent/runtime.test.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard/messaging-channel-setup.ts
  • test/hermes-secret-boundary-api-key.test.ts
  • test/hermes-start.test.ts
  • test/langchain-deepagents-code-image.test.ts
  • test/sandbox-init.test.ts
  • test/skills-frontmatter.test.ts
💤 Files with no reviewable changes (1)
  • test/skills-frontmatter.test.ts
✅ Files skipped from review due to trivial changes (3)
  • ci/platform-matrix.json
  • docs/reference/platform-support.mdx
  • src/lib/agent/base-image.test.ts
🚧 Files skipped from review as they are similar to previous changes (14)
  • agents/openclaw/manifest.yaml
  • agents/hermes/manifest.yaml
  • src/lib/agent/defs.test.ts
  • src/lib/agent/hermes-recovery-boundary-fixtures.ts
  • src/lib/agent/onboard.test.ts
  • src/lib/onboard/messaging-channel-setup.ts
  • src/lib/actions/sandbox/rebuild-flow.test.ts
  • src/lib/agent/defs.ts
  • src/lib/agent/runtime.test.ts
  • agents/langchain-deepagents-code/manifest.yaml
  • agents/langchain-deepagents-code/start.sh
  • agents/langchain-deepagents-code/Dockerfile
  • src/lib/actions/sandbox/rebuild.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
🛑 Comments failed to post (2)
src/lib/actions/sandbox/snapshot.ts (1)

66-69: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Tighten dcode matching to the executable position.

Because ps -eo pid=,args= feeds the full argv string into awk, Lines 68-69 also match plain arguments like cat /tmp/dcode or grep deepagents-code notes.txt. That will report active and refuse snapshot creation even though no dcode runtime is running.

Suggested fix
 printf '%s\n' "$processes" | awk '
-/python[0-9.]*[[:space:]]+-m[[:space:]]+deepagents[_]code/ { found = 1 }
-/(^|[[:space:]\/])[d]code($|[[:space:]])/ { found = 1 }
-/(^|[[:space:]\/])deepagents[-_]code($|[[:space:]])/ { found = 1 }
+/^[[:space:]]*[0-9]+[[:space:]]+python[0-9.]*[[:space:]]+-m[[:space:]]+deepagents[_]code([[:space:]]|$)/ {
+  found = 1
+}
+/^[[:space:]]*[0-9]+[[:space:]]+([^[:space:]]*\/)?[d]code([[:space:]]|$)/ {
+  found = 1
+}
+/^[[:space:]]*[0-9]+[[:space:]]+([^[:space:]]*\/)?deepagents[-_]code([[:space:]]|$)/ {
+  found = 1
+}
 END { exit found ? 0 : 1 }
 '
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

printf '%s\n' "$processes" | awk '
/^[[:space:]]*[0-9]+[[:space:]]+python[0-9.]*[[:space:]]+-m[[:space:]]+deepagents[_]code([[:space:]]|$)/ {
  found = 1
}
/^[[:space:]]*[0-9]+[[:space:]]+([^[:space:]]*\/)?[d]code([[:space:]]|$)/ {
  found = 1
}
/^[[:space:]]*[0-9]+[[:space:]]+([^[:space:]]*\/)?deepagents[-_]code([[:space:]]|$)/ {
  found = 1
}
END { exit found ? 0 : 1 }
'
🤖 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/snapshot.ts` around lines 66 - 69, The awk-based
process detection in snapshot creation is matching any argv token, so plain
arguments like file contents or grep targets can falsely mark dcode as running.
Tighten the matching in the snapshot logic around the awk patterns in
snapshot.ts so they only recognize the executable position within ps args (for
example, by anchoring to the start of the command or after the PID/command
boundary) and preserve the existing python/deepagents_code detection while
avoiding incidental matches from arguments.
test/langchain-deepagents-code-image.test.ts (1)

21-29: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Fail fast on malformed binaries[].path entries.

Mapping non-string path values to "" lets a broken policy-additions.yaml shape keep passing as long as the expected paths are still present. This weakens the binary-scoped egress regression; assert each entry has a string path instead of normalizing invalid values.

Proposed fix
 function policyBinaryPaths(policyText: string, policyName: string): string[] {
   const parsed = YAML.parse(policyText) as {
     network_policies?: Record<string, { binaries?: Array<{ path?: unknown }> }>;
   };
   const binaries = parsed.network_policies?.[policyName]?.binaries;
   expect(Array.isArray(binaries), `${policyName} policy must declare binary-scoped egress`).toBe(
     true,
   );
-  return (binaries ?? []).map((entry) => (typeof entry.path === "string" ? entry.path : ""));
+  return (binaries ?? []).map((entry, index) => {
+    expect(typeof entry.path, `${policyName} binary #${index} must declare a string path`).toBe(
+      "string",
+    );
+    return entry.path as string;
+  });
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

function policyBinaryPaths(policyText: string, policyName: string): string[] {
  const parsed = YAML.parse(policyText) as {
    network_policies?: Record<string, { binaries?: Array<{ path?: unknown }> }>;
  };
  const binaries = parsed.network_policies?.[policyName]?.binaries;
  expect(Array.isArray(binaries), `${policyName} policy must declare binary-scoped egress`).toBe(
    true,
  );
  return (binaries ?? []).map((entry, index) => {
    expect(typeof entry.path, `${policyName} binary #${index} must declare a string path`).toBe(
      "string",
    );
    return entry.path as string;
  });
🤖 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/langchain-deepagents-code-image.test.ts` around lines 21 - 29, The
`policyBinaryPaths` helper is silently normalizing invalid `binaries[].path`
values to an empty string, which can hide malformed policy entries. Update
`policyBinaryPaths` to fail fast by asserting each `binaries` entry has a string
`path` before returning paths, rather than mapping non-string values to `""`.
Keep the check close to `YAML.parse` and the
`network_policies[policyName].binaries` access so malformed
`policy-additions.yaml` shapes are rejected immediately.

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 28214133003
Target ref: fix/messaging-channel-source-of-truth-deepagents
Requested jobs: onboard-resume-e2e,onboard-repair-e2e,cloud-onboard-e2e,messaging-providers-e2e,channels-add-remove-e2e,channels-stop-start-openclaw-e2e,channels-stop-start-hermes-e2e,rebuild-openclaw-e2e,rebuild-hermes-e2e,hermes-discord-e2e,hermes-slack-e2e,telegram-injection-e2e,openclaw-discord-pairing-e2e,openclaw-slack-pairing-e2e,hermes-e2e
Summary: 12 passed, 3 failed, 0 cancelled, 0 skipped

Job Result
channels-add-remove-e2e ✅ success
channels-stop-start-hermes-e2e ❌ failure
channels-stop-start-openclaw-e2e ❌ failure
cloud-onboard-e2e ✅ success
hermes-discord-e2e ✅ success
hermes-e2e ✅ success
hermes-slack-e2e ❌ failure
messaging-providers-e2e ✅ success
onboard-repair-e2e ✅ success
onboard-resume-e2e ✅ success
openclaw-discord-pairing-e2e ✅ success
openclaw-slack-pairing-e2e ✅ success
rebuild-hermes-e2e ✅ success
rebuild-openclaw-e2e ✅ success
telegram-injection-e2e ✅ success

Failed jobs: channels-stop-start-hermes-e2e, channels-stop-start-openclaw-e2e, hermes-slack-e2e. Check run artifacts for logs.

@cv
cv merged commit 33c2ba4 into main Jun 26, 2026
47 checks passed
@cv
cv deleted the fix/messaging-channel-source-of-truth-deepagents branch June 26, 2026 05:06
@wscurran wscurran added the integration: dcode LangChain Deep Code integration behavior label Jun 26, 2026
cv pushed a commit that referenced this pull request Jun 29, 2026
## Summary
Adds the v0.0.69 release notes to the published release-notes page so
users can see the shipped sandbox recovery, Deep Agents Code, Hermes,
inference, policy, and release-validation changes.
The section is based on the v0.0.69 announcement and links each
user-facing theme to the deeper docs pages that already cover the
behavior.

## Changes
- Added a new `v0.0.69` section to `docs/about/release-notes.mdx`.
- Linked release-note themes to lifecycle, backup, troubleshooting, Deep
Agents Code, commands, workspace, messaging, Hermes, inference,
security, monitoring, and network-policy docs.

Source summary:
- #5455 -> `docs/about/release-notes.mdx`: Summarized persistent
workspace and state cleanup during sandbox destroy.
- #5738 -> `docs/about/release-notes.mdx`: Summarized nonzero exit
status preservation for failed hosted endpoint validation.
- #5786 -> `docs/about/release-notes.mdx`: Summarized live sandbox
rediscovery when local registry state is missing.
- #5881 -> `docs/about/release-notes.mdx`: Summarized the
`nemo-deepagents` alias command surface.
- #5594 -> `docs/about/release-notes.mdx`: Summarized the Hermes Agent
2026.6.19 update.
- #5777 -> `docs/about/release-notes.mdx`: Summarized manifest-derived
messaging channel support.
- #5825 -> `docs/about/release-notes.mdx`: Summarized DeepSeek V4 Flash
managed-vLLM defaults for DGX Station.
- #5877 -> `docs/about/release-notes.mdx`: Summarized provider switch
metadata preservation.
- #5932 -> `docs/about/release-notes.mdx`: Summarized transient
inference smoke retry behavior.
- #5934 -> `docs/about/release-notes.mdx`: Summarized constrained
inference smoke retry boundaries.
- #5681 -> `docs/about/release-notes.mdx`: Summarized Shields
config-hash sealing during auto-restore.
- #5682 -> `docs/about/release-notes.mdx`: Summarized sandbox connect
process-limit enforcement.
- #5683 -> `docs/about/release-notes.mdx`: Summarized JSON agent failure
provenance warnings.
- #5711 -> `docs/about/release-notes.mdx`: Summarized sparse-source log
breadcrumbs.
- #5838 -> `docs/about/release-notes.mdx`: Summarized host-authoritative
Shields status.
- #5880 -> `docs/about/release-notes.mdx`: Summarized policy round-trip
documentation updates.
- #5886 -> `docs/about/release-notes.mdx`: Summarized network request
approval-flow documentation updates.

## 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)

## Quality Gates
- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: doc-only release-notes
prose; no runtime behavior changed.
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [ ] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [ ] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] Git hooks passed during commit and push, or `npx prek run
--from-ref main --to-ref HEAD` passes
- [ ] 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)

`npm run docs` passed with 0 errors and the existing Fern light-mode
accent contrast warning.
`fern check --warnings` reported the same accent-color warning.

---
Signed-off-by: Miyoung Choi <miyoungc@nvidia.com>

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

* **Documentation**
* Added release notes for **v0.0.69**, covering improved sandbox
lifecycle recovery (state preservation across
destroy/recreate/rebuild/recovery/validation failures), clearer Deep
Agents Code terminal/CLI behavior, and safer Hermes messaging/provider
switching with manifest-driven channels.
* Improved inference setup validation guidance, including handling of
local/compatible endpoints and redaction of sensitive validation errors.
* Refreshed release-gate documentation with clearer approval examples
and validation behavior for NVIDIA API keys vs hosted inference keys.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
## Summary
Derive supported messaging agents and channels from channel manifests
instead of agent manifests, so `supportedAgents` is the source of truth.
This also removes artifact-only DeepAgents messaging wiring and rejects
unsupported channel/agent pairs before policy, provider, credential,
registry, or rebuild mutation.

## Related Issue
Related PRs: NVIDIA#5743, NVIDIA#5673. Stacked on NVIDIA#5768, Fixes NVIDIA#5729

## Acceptance Note
DeepAgents messaging is intentionally fail-closed in this PR. NemoClaw
does not claim Discord, Telegram, Slack, or other channel delivery for
LangChain Deep Agents Code until a real DeepAgents messaging bridge
exists. The fix for NVIDIA#5729 is to reject unsupported DeepAgents channel
setup before policy, credential, registry, rebuild, or Dockerfile
mutation, instead of injecting a stale messaging plan into a sandbox
that cannot consume inbound channel traffic.

## Changes
- Remove `messaging_platforms` parsing from agent manifests and derive
available channels from channel manifest `supportedAgents`.
- Remove DeepAgents messaging build/runtime artifacts until a real
messaging bridge exists.
- Gate `channels add`, `channels list`, onboard filtering, and rebuild
staging from manifest-derived channel support.
- Update regression tests for DeepAgents rejection, stale messaging
cleanup, rebuild skipping, and manifest helper behavior.
- Update platform-support docs to reference channel manifest
`supportedAgents`.

## 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)

## Verification
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] 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] 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)
- [ ] 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 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

* **Bug Fixes**
* Messaging channel availability is now derived from each channel
manifest’s `supportedAgents`, improving enable/disable, rebuild
planning, and channel status matching.
* DeepAgents startup and rebuild no longer include unsupported messaging
runtime wiring, env handling, or messaging artifacts.
* Channel add/cleanup gates now reject unsupported agent/channel pairs
earlier with clearer “channel-supported agents” guidance.
* **Documentation**
* Updated platform support and DeepAgents eligibility guidance to make
`supportedAgents` the single source of truth for messaging support.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
## Summary
Adds the v0.0.69 release notes to the published release-notes page so
users can see the shipped sandbox recovery, Deep Agents Code, Hermes,
inference, policy, and release-validation changes.
The section is based on the v0.0.69 announcement and links each
user-facing theme to the deeper docs pages that already cover the
behavior.

## Changes
- Added a new `v0.0.69` section to `docs/about/release-notes.mdx`.
- Linked release-note themes to lifecycle, backup, troubleshooting, Deep
Agents Code, commands, workspace, messaging, Hermes, inference,
security, monitoring, and network-policy docs.

Source summary:
- NVIDIA#5455 -> `docs/about/release-notes.mdx`: Summarized persistent
workspace and state cleanup during sandbox destroy.
- NVIDIA#5738 -> `docs/about/release-notes.mdx`: Summarized nonzero exit
status preservation for failed hosted endpoint validation.
- NVIDIA#5786 -> `docs/about/release-notes.mdx`: Summarized live sandbox
rediscovery when local registry state is missing.
- NVIDIA#5881 -> `docs/about/release-notes.mdx`: Summarized the
`nemo-deepagents` alias command surface.
- NVIDIA#5594 -> `docs/about/release-notes.mdx`: Summarized the Hermes Agent
2026.6.19 update.
- NVIDIA#5777 -> `docs/about/release-notes.mdx`: Summarized manifest-derived
messaging channel support.
- NVIDIA#5825 -> `docs/about/release-notes.mdx`: Summarized DeepSeek V4 Flash
managed-vLLM defaults for DGX Station.
- NVIDIA#5877 -> `docs/about/release-notes.mdx`: Summarized provider switch
metadata preservation.
- NVIDIA#5932 -> `docs/about/release-notes.mdx`: Summarized transient
inference smoke retry behavior.
- NVIDIA#5934 -> `docs/about/release-notes.mdx`: Summarized constrained
inference smoke retry boundaries.
- NVIDIA#5681 -> `docs/about/release-notes.mdx`: Summarized Shields
config-hash sealing during auto-restore.
- NVIDIA#5682 -> `docs/about/release-notes.mdx`: Summarized sandbox connect
process-limit enforcement.
- NVIDIA#5683 -> `docs/about/release-notes.mdx`: Summarized JSON agent failure
provenance warnings.
- NVIDIA#5711 -> `docs/about/release-notes.mdx`: Summarized sparse-source log
breadcrumbs.
- NVIDIA#5838 -> `docs/about/release-notes.mdx`: Summarized host-authoritative
Shields status.
- NVIDIA#5880 -> `docs/about/release-notes.mdx`: Summarized policy round-trip
documentation updates.
- NVIDIA#5886 -> `docs/about/release-notes.mdx`: Summarized network request
approval-flow documentation updates.

## 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)

## Quality Gates
- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: doc-only release-notes
prose; no runtime behavior changed.
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [ ] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [ ] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] Git hooks passed during commit and push, or `npx prek run
--from-ref main --to-ref HEAD` passes
- [ ] 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)

`npm run docs` passed with 0 errors and the existing Fern light-mode
accent contrast warning.
`fern check --warnings` reported the same accent-color warning.

---
Signed-off-by: Miyoung Choi <miyoungc@nvidia.com>

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

* **Documentation**
* Added release notes for **v0.0.69**, covering improved sandbox
lifecycle recovery (state preservation across
destroy/recreate/rebuild/recovery/validation failures), clearer Deep
Agents Code terminal/CLI behavior, and safer Hermes messaging/provider
switching with manifest-driven channels.
* Improved inference setup validation guidance, including handling of
local/compatible endpoints and redaction of sensitive validation errors.
* Refreshed release-gate documentation with clearer approval examples
and validation behavior for NVIDIA API keys vs hosted inference keys.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: messaging Messaging channels, bridges, manifests, or channel lifecycle bug-fix PR fixes a bug or regression integration: dcode LangChain Deep Code integration behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Onboard] nemoclaw channels add fails for DeepAgents with "Dockerfile is missing ARG NEMOCLAW_MESSAGING_PLAN_B64"

4 participants