refactor(messaging): derive channel support from manifests - #5777
Conversation
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (3)
🚧 Files skipped from review as they are similar to previous changes (2)
📝 WalkthroughWalkthroughThe 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. ChangesMessaging support and runtime cleanup
Estimated code review effort🎯 5 (Critical) | ⏱️ ~90+ minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage in the Show a code coverage summary of the most covered files.
TypeScript / code-coverage/cliThe overall coverage in the Show a code coverage summary of the most covered files.
Updated |
PR Review Advisor — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
Review findings by urgency: 0 required fixes, 1 item to resolve/justify, 0 in-scope improvements
|
E2E Advisor RecommendationRequired E2E: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
|
Vitest E2E Scenario RecommendationRequired Vitest E2E scenarios: Dispatch required Vitest E2E scenarios:
Full Vitest E2E advisor summaryVitest E2E Scenario AdvisorBase: Required Vitest E2E scenarios
Optional Vitest E2E scenarios
Relevant changed files
|
|
🌿 Preview your docs: https://nvidia-preview-pr-5777.docs.buildwithfern.com/nemoclaw |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/lib/messaging/utils.ts (1)
52-60: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low valueInconsistent name trimming between helpers.
tryGetMessagingAgentIdmatches against the rawagent.name, whileisMessagingChannelSupportedByAgentandgetMessagingManifestAvailabilityContexttrim it first. IngetMessagingManifestAvailabilityContextthe trimmednameguard passes for a whitespace-padded valid name (e.g." openclaw "), but the subsequenttryGetMessagingAgentId(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
📒 Files selected for processing (46)
.agents/skills/nemoclaw-contributor-onboard-messaging-channel/SKILL.mdagents/hermes/manifest.yamlagents/langchain-deepagents-code/Dockerfileagents/langchain-deepagents-code/manifest.yamlagents/langchain-deepagents-code/start.shagents/openclaw/manifest.yamlci/platform-matrix.jsondocs/reference/platform-support.mdxsrc/lib/actions/sandbox/channel-status.test.tssrc/lib/actions/sandbox/channel-status.tssrc/lib/actions/sandbox/policy-channel-agent-gate.test.tssrc/lib/actions/sandbox/policy-channel-cleanup.test.tssrc/lib/actions/sandbox/policy-channel-conflict.test.tssrc/lib/actions/sandbox/policy-channel.tssrc/lib/actions/sandbox/rebuild-flow.test.tssrc/lib/actions/sandbox/rebuild-messaging-stage.test.tssrc/lib/actions/sandbox/rebuild-resume-snapshot.test.tssrc/lib/actions/sandbox/rebuild.tssrc/lib/agent/base-image.test.tssrc/lib/agent/defs.test.tssrc/lib/agent/defs.tssrc/lib/agent/hermes-recovery-boundary-fixtures.tssrc/lib/agent/onboard.test.tssrc/lib/agent/runtime.test.tssrc/lib/messaging/AGENTS.mdsrc/lib/messaging/applier/build/messaging-build-applier.mtssrc/lib/messaging/channels/discord/manifest.tssrc/lib/messaging/channels/slack/manifest.tssrc/lib/messaging/channels/telegram/manifest.tssrc/lib/messaging/manifest/registry.test.tssrc/lib/messaging/manifest/types.tssrc/lib/messaging/utils.test.tssrc/lib/messaging/utils.tssrc/lib/onboard.tssrc/lib/onboard/machine/handlers/sandbox.test.tssrc/lib/onboard/machine/handlers/sandbox.tssrc/lib/onboard/messaging-channel-setup-fallback.test.tssrc/lib/onboard/messaging-channel-setup.tssrc/lib/onboard/messaging-state.test.tssrc/lib/onboard/messaging-state.tstest/channels-add-deepagents-rejection.test.tstest/dcode-start-keepalive.test.tstest/langchain-deepagents-code-image.test.tstest/messaging-build-applier.test.tstest/onboard-terminal-dashboard.test.tstest/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
Selective E2E Results — ✅ All requested jobs passedRun: 28185525568
|
There was a problem hiding this comment.
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
📒 Files selected for processing (24)
agents/hermes/manifest.yamlagents/langchain-deepagents-code/Dockerfileagents/langchain-deepagents-code/manifest.yamlagents/langchain-deepagents-code/start.shagents/openclaw/manifest.yamlci/platform-matrix.jsondocs/reference/platform-support.mdxsrc/lib/actions/sandbox/rebuild-flow.test.tssrc/lib/actions/sandbox/rebuild.tssrc/lib/actions/sandbox/snapshot.test.tssrc/lib/actions/sandbox/snapshot.tssrc/lib/agent/base-image.test.tssrc/lib/agent/defs.test.tssrc/lib/agent/defs.tssrc/lib/agent/hermes-recovery-boundary-fixtures.tssrc/lib/agent/onboard.test.tssrc/lib/agent/runtime.test.tssrc/lib/onboard/machine/handlers/sandbox.test.tssrc/lib/onboard/messaging-channel-setup.tstest/hermes-secret-boundary-api-key.test.tstest/hermes-start.test.tstest/langchain-deepagents-code-image.test.tstest/sandbox-init.test.tstest/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
There was a problem hiding this comment.
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
📒 Files selected for processing (24)
agents/hermes/manifest.yamlagents/langchain-deepagents-code/Dockerfileagents/langchain-deepagents-code/manifest.yamlagents/langchain-deepagents-code/start.shagents/openclaw/manifest.yamlci/platform-matrix.jsondocs/reference/platform-support.mdxsrc/lib/actions/sandbox/rebuild-flow.test.tssrc/lib/actions/sandbox/rebuild.tssrc/lib/actions/sandbox/snapshot.test.tssrc/lib/actions/sandbox/snapshot.tssrc/lib/agent/base-image.test.tssrc/lib/agent/defs.test.tssrc/lib/agent/defs.tssrc/lib/agent/hermes-recovery-boundary-fixtures.tssrc/lib/agent/onboard.test.tssrc/lib/agent/runtime.test.tssrc/lib/onboard/machine/handlers/sandbox.test.tssrc/lib/onboard/messaging-channel-setup.tstest/hermes-secret-boundary-api-key.test.tstest/hermes-start.test.tstest/langchain-deepagents-code-image.test.tstest/sandbox-init.test.tstest/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 likecat /tmp/dcodeorgrep deepagents-code notes.txt. That will reportactiveand 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[].pathentries.Mapping non-string
pathvalues to""lets a brokenpolicy-additions.yamlshape keep passing as long as the expected paths are still present. This weakens the binary-scoped egress regression; assert each entry has a stringpathinstead 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.
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Selective E2E Results — ❌ Some jobs failedRun: 28214133003
|
## 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 -->
## 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>
## 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 -->
Summary
Derive supported messaging agents and channels from channel manifests instead of agent manifests, so
supportedAgentsis 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
messaging_platformsparsing from agent manifests and derive available channels from channel manifestsupportedAgents.channels add,channels list, onboard filtering, and rebuild staging from manifest-derived channel support.supportedAgents.Type of Change
Verification
Verifiedin GitHubnpx prek run --from-ref main --to-ref HEADpassesnpm testpasses (broad runtime changes only)npm run docsbuilds without warnings (doc changes only)Signed-off-by: San Dang sdang@nvidia.com
Summary by CodeRabbit
supportedAgents, improving enable/disable, rebuild planning, and channel status matching.supportedAgentsthe single source of truth for messaging support.