Skip to content

fix(agent): keep Deep Agents Code sandbox alive with a stable entrypoint - #5725

Merged
cv merged 3 commits into
mainfrom
auto/fix-dcode-sandbox-keepalive
Jun 24, 2026
Merged

fix(agent): keep Deep Agents Code sandbox alive with a stable entrypoint#5725
cv merged 3 commits into
mainfrom
auto/fix-dcode-sandbox-keepalive

Conversation

@jason-ma-nv

@jason-ma-nv jason-ma-nv commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

The Deep Agents Code (langchain-deepagents-code) sandbox entrypoint (agents/langchain-deepagents-code/start.sh) execs a bare /bin/bash when invoked with no command. As a terminal-runtime agent it has no daemon, so this bash is the sandbox's sole foreground process — but a non-interactive bash with no TTY and EOF on stdin exits immediately, leaving the sandbox with no persistent process. OpenShell then flaps it into the Error phase, which breaks the Docker GPU-patch supervisor reconnect (openshell sandbox exec -- true) so a GPU-enabled Deep Agents onboard aborts with "supervisor did not reconnect to the GPU-enabled container". This idles on a stable sleep infinity instead.

Related Issue

Related to #5717

Changes

  • agents/langchain-deepagents-code/start.sh: when run with no command (the sandbox's long-running entrypoint), exec sleep infinity instead of a self-exiting /bin/bash, so the terminal-runtime sandbox stays Ready and exec-able. Explicitly-supplied commands still exec "$@". Deep Agents Code is invoked on demand via openshell sandbox exec, independent of the entrypoint process.
  • test/dcode-start-keepalive.test.ts: asserts the no-args entrypoint stays alive (killed by timeout, not self-exited) and still execs an explicit command.

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: Jason Ma jama@nvidia.com

Summary by CodeRabbit

  • Bug Fixes
    • Updated the sandbox entrypoint’s no-command startup behavior so it remains running continuously, preventing unexpected exits and instability.
    • Kept behavior consistent when a command is provided, ensuring it still executes and completes normally.
  • Tests
    • Added automated coverage for both scenarios: idle/keepalive startup and command-run startup, including validation of termination vs successful completion.

The Deep Agents Code (langchain-deepagents-code) sandbox entrypoint
(agents/langchain-deepagents-code/start.sh) execs a bare `/bin/bash` when run
with no command. As a terminal-runtime agent it has no daemon, so this bash is
the sandbox's sole foreground process — but a non-interactive bash with no TTY
and EOF on stdin exits immediately. The sandbox is then left with no persistent
process: OpenShell flaps it into the Error phase, which breaks the Docker
GPU-patch supervisor reconnect (`openshell sandbox exec -- true`) so a
GPU-enabled Deep Agents onboard fails with 'supervisor did not reconnect'.

Idle on a stable `sleep infinity` instead so the sandbox stays Ready and
exec-able. Deep Agents Code is still invoked on demand via
`openshell sandbox exec`, which is independent of the entrypoint process.

Verified on a DGX Spark (aarch64): pre-fix the deepagents GPU onboard aborted
at the GPU-patch reconnect; post-fix the sandbox reaches Ready, PID 1 is
'sleep infinity', and 'nemoclaw <name> exec' succeeds.

Related to #5717

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Jason Ma <jama@nvidia.com>
@jason-ma-nv jason-ma-nv self-assigned this Jun 24, 2026
@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

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: 597f97d1-7aea-46cd-aa3d-ef25b3632b9e

📥 Commits

Reviewing files that changed from the base of the PR and between de8748a and 6758079.

📒 Files selected for processing (1)
  • test/dcode-start-keepalive.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • test/dcode-start-keepalive.test.ts

📝 Walkthrough

Walkthrough

The no-args entrypoint branch in agents/langchain-deepagents-code/start.sh now runs exec sleep infinity instead of falling back to /bin/bash, and a new Vitest suite verifies both the idle keep-alive path and explicit command passthrough.

Changes

Sandbox Entrypoint Keep-Alive

Layer / File(s) Summary
exec sleep infinity replacement and keep-alive tests
agents/langchain-deepagents-code/start.sh, test/dcode-start-keepalive.test.ts
start.sh replaces set -- /bin/bash with exec sleep infinity when invoked with no arguments, and adds comments explaining the stable-foreground requirement. The new Vitest suite asserts the no-args path is killed by timeout signal (status null) and that an explicit command argument runs normally (status 0, correct stdout).

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Poem

🐇 No more bash that blinks and flees,
Now sleep infinity is the key!
The sandbox hums, forever on,
A foreground process, steady, strong.
Tests confirm it stays alive—
This little rabbit helps it thrive! 🌙

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly captures the main change: keeping the Deep Agents Code sandbox alive with a stable entrypoint.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ 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 auto/fix-dcode-sandbox-keepalive

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

@github-code-quality

github-code-quality Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in the auto/fix-dcode-sandb... 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 auto/fix-dcode-sandb... 31fd1ae +/-
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 auto/fix-dcode-sandb... 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 auto/fix-dcode-sandb... 31fd1ae +/-
src/lib/state/o...oard-session.ts 91%
src/lib/inference/local.ts 76%
src/lib/sandbox/config.ts 72%
src/lib/actions...dbox/rebuild.ts 70%
src/lib/onboard/preflight.ts 64%
src/lib/actions...licy-channel.ts 58%
src/lib/state/sandbox.ts 55%
src/lib/onboard...er-gpu-patch.ts 50%
src/lib/policy/index.ts 49%
src/lib/onboard.ts 18%

Updated June 24, 2026 21:19 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@github-actions

github-actions Bot commented Jun 24, 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: Source-of-truth review needed: Keepalive test runtime-env cleanup.
Open items: 0 required · 3 warnings · 1 suggestion · 8 test follow-ups
Since last review: 0 prior items resolved · 1 still applies · 2 new items found

Action checklist

  • PRA-1 Resolve or justify: Source-of-truth review needed: Keepalive test runtime-env cleanup
  • PRA-2 Resolve or justify: Keepalive test mutates the real host /tmp runtime-env path in test/dcode-start-keepalive.test.ts:19
  • PRA-3 Resolve or justify: Sandbox Ready/execable acceptance is only unit-level covered in agents/langchain-deepagents-code/start.sh:85
  • 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: Keepalive test mutates the real host /tmp runtime-env path
  • PRA-T5 Add or justify test follow-up: Remove unnecessary @ts-nocheck from the new test
  • 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
  • PRA-4 In-scope improvement: Remove unnecessary @ts-nocheck from the new test in test/dcode-start-keepalive.test.ts:1

Findings index

ID Severity Category Location Required action
PRA-1 Resolve/justify architecture Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
PRA-2 Resolve/justify tests test/dcode-start-keepalive.test.ts:19 Patch this test to execute a per-test temporary copy of `start.sh` whose `local target=/tmp/nemoclaw-proxy-env.sh` and `mktemp /tmp/nemoclaw-proxy-env.XXXXXX` template are rewritten under `fs.mkdtempSync(...)`, then clean up only that temp directory. Reuse or duplicate the existing `makeStartScriptFixture(tempDir)` pattern from `test/langchain-deepagents-code-image.test.ts` while preserving direct execution of the script for ENTRYPOINT-contract coverage.
PRA-3 Resolve/justify acceptance agents/langchain-deepagents-code/start.sh:85 Add or identify targeted runtime/integration validation for this changed behavior: create a LangChain Deep Agents Code sandbox through NemoClaw/OpenShell with the managed startup command, wait past the old bash self-exit interval, and verify the sandbox remains Ready and `openshell sandbox exec <name> -- true` succeeds. If GPU reconnect is the affected path, validate that path on a GPU-capable host without relying on external job status in the PR review surface.
PRA-4 Improvement tests test/dcode-start-keepalive.test.ts:1 Delete `// @ts-nocheck`; if a concrete type error remains, fix that local type issue rather than suppressing the whole file.
Review findings by urgency: 0 required fixes, 3 items to resolve/justify, 1 in-scope improvement

⚠️ 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 — Source-of-truth review needed: Keepalive test runtime-env cleanup

  • Location: not file-specific
  • Category: architecture
  • Problem: The advisor marked localized patch analysis as needs_followup.
  • Impact: A localized workaround can preserve or hide an invalid state when the source boundary is unclear.
  • Recommended action: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Inspect the localized patch and source-of-truth review fields for a concrete invalid state, source boundary, source-fix constraint, regression test, and removal condition.
  • Missing regression test: Covered by the finding requesting an assertion that the temp env file is created under the test temp directory and the literal `/tmp/nemoclaw-proxy-env.sh` path is untouched.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Inspect the localized patch and source-of-truth review fields for a concrete invalid state, source boundary, source-fix constraint, regression test, and removal condition.
  • Evidence: `test/dcode-start-keepalive.test.ts` defines `RUNTIME_ENV_FILE = "/tmp/nemoclaw-proxy-env.sh"` and deletes it in `afterEach`; `test/langchain-deepagents-code-image.test.ts` has a temp fixture that rewrites this path.

PRA-2 Resolve/justify — Keepalive test mutates the real host /tmp runtime-env path

  • Location: test/dcode-start-keepalive.test.ts:19
  • Category: tests
  • Problem: The new test spawns the repository `start.sh` directly. That script always runs `prepare_runtime_env`, which writes `/tmp/nemoclaw-proxy-env.sh`, and the test then unconditionally removes that same hardcoded path in `afterEach`. Nearby Deep Agents Code image tests already avoid this by creating a temporary `start.sh` fixture that rewrites both the runtime-env target and the `mktemp` template into a per-test directory.
  • Impact: A local or parallel test run can overwrite or delete `/tmp/nemoclaw-proxy-env.sh` created by a developer, another test, or a sandbox/runtime-env validation. It can also materialize selected host env-derived proxy/CA/project values into a predictable global `/tmp` file, weakening test isolation and masking runtime-env bugs.
  • Recommended action: Patch this test to execute a per-test temporary copy of `start.sh` whose `local target=/tmp/nemoclaw-proxy-env.sh` and `mktemp /tmp/nemoclaw-proxy-env.XXXXXX` template are rewritten under `fs.mkdtempSync(...)`, then clean up only that temp directory. Reuse or duplicate the existing `makeStartScriptFixture(tempDir)` pattern from `test/langchain-deepagents-code-image.test.ts` while preserving direct execution of the script for ENTRYPOINT-contract coverage.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Read `test/dcode-start-keepalive.test.ts` and confirm it no longer defines or removes `/tmp/nemoclaw-proxy-env.sh`; the spawned script path should be a temp fixture, and the generated env file should live under the test temp directory.
  • Missing regression test: Add an assertion in the keepalive test fixture that the temp env file is created under the test temp directory and that the literal `/tmp/nemoclaw-proxy-env.sh` path is not created, overwritten, or removed by this test.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Read `test/dcode-start-keepalive.test.ts` and confirm it no longer defines or removes `/tmp/nemoclaw-proxy-env.sh`; the spawned script path should be a temp fixture, and the generated env file should live under the test temp directory.
  • Evidence: `test/dcode-start-keepalive.test.ts` defines `const RUNTIME_ENV_FILE = "/tmp/nemoclaw-proxy-env.sh"`, removes it in `afterEach`, and spawns `START_SCRIPT`; `agents/langchain-deepagents-code/start.sh` still contains `local target=/tmp/nemoclaw-proxy-env.sh` and `mktemp /tmp/nemoclaw-proxy-env.XXXXXX`.

PRA-3 Resolve/justify — Sandbox Ready/execable acceptance is only unit-level covered

  • Location: agents/langchain-deepagents-code/start.sh:85
  • Category: acceptance
  • Problem: The code and new unit test cover the no-arg branch becoming a long-running `sleep infinity`, but the PR's acceptance statement also depends on the OpenShell sandbox lifecycle: the terminal-runtime sandbox should remain Ready and `openshell sandbox exec` should work after the old non-interactive `/bin/bash` would have exited. No checked-in test in this PR exercises that runtime boundary.
  • Impact: A regression in the NemoClaw/OpenShell create command, Docker GPU-patch reconnect path, or sandbox readiness handling could still leave the Deep Agents Code sandbox non-execable even though the direct shell unit test passes.
  • Recommended action: Add or identify targeted runtime/integration validation for this changed behavior: create a LangChain Deep Agents Code sandbox through NemoClaw/OpenShell with the managed startup command, wait past the old bash self-exit interval, and verify the sandbox remains Ready and `openshell sandbox exec <name> -- true` succeeds. If GPU reconnect is the affected path, validate that path on a GPU-capable host without relying on external job status in the PR review surface.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Search the checked-in tests for a Deep Agents Code sandbox creation that runs the managed `nemoclaw-start` entrypoint and then performs `openshell sandbox exec <name> -- true`; the current changed tests only spawn `start.sh` locally.
  • Missing regression test: Add a runtime/integration test or documented checked-in scenario that creates the Deep Agents Code sandbox, observes that PID 1 remains long-running after startup, and verifies an exec command succeeds after the prior `/bin/bash` no-TTY fallback would have exited.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Search the checked-in tests for a Deep Agents Code sandbox creation that runs the managed `nemoclaw-start` entrypoint and then performs `openshell sandbox exec <name> -- true`; the current changed tests only spawn `start.sh` locally.
  • Evidence: `test/dcode-start-keepalive.test.ts` asserts `result.signal === "SIGTERM"` for direct no-arg execution and `status === 0` for an explicit command, but the changed files do not create an OpenShell sandbox or verify `openshell sandbox exec` behavior.

💡 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.

PRA-4 Improvement — Remove unnecessary @ts-nocheck from the new test

  • Location: test/dcode-start-keepalive.test.ts:1
  • Category: tests
  • Problem: The new TypeScript test disables type checking for the entire file, but the file uses standard Node and Vitest APIs and has no visible type-heavy boundary that requires suppression.
  • Impact: Future mistakes in this test, such as misspelled spawn result fields or incorrect helper return shapes, would be hidden from TypeScript instead of failing during normal test/typecheck workflows.
  • Suggested action: Delete `// @ts-nocheck`; if a concrete type error remains, fix that local type issue rather than suppressing the whole file.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Read the first few lines of `test/dcode-start-keepalive.test.ts` and confirm the file no longer contains `// @ts-nocheck`.
  • Missing regression test: No new behavioral regression test is needed; once the directive is removed, the existing TypeScript/Vitest checking for this test file should cover type mistakes.
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: `test/dcode-start-keepalive.test.ts` starts with `// @ts-nocheck` while only importing `spawnSync`, `fs`, `path`, and Vitest helpers.
Simplification opportunities: 2 possible cuts, net -1 lines possible

These are safe simplification checks only. Do not remove validation, security controls, data-loss prevention, or required tests.

  • PRA-2 shrink (test/dcode-start-keepalive.test.ts:19): The global `/tmp/nemoclaw-proxy-env.sh` cleanup wrapper around a direct spawn of the repository script.
    • Replacement: Spawn a per-test temporary copy of `start.sh` with the runtime-env target and mktemp template redirected to the temp directory.
    • Safety boundary: Keep the real shell execution boundary and both behavioral assertions: no-arg entrypoint must remain alive until timeout, and explicitly supplied commands must still exec.
  • PRA-4 delete (test/dcode-start-keepalive.test.ts:1): The file-wide `// @ts-nocheck` directive.
    • Replacement: Let TypeScript check the new test normally and fix any specific type issue locally.
    • Net: -1 lines
    • Safety boundary: Do not remove the actual shell-spawn behavior or assertions that exercise the ENTRYPOINT contract.
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 a LangChain Deep Agents Code sandbox through NemoClaw/OpenShell with the managed startup command using `nemoclaw-start`; verify it remains Ready and `openshell sandbox exec <name> -- true` succeeds after the interval where the old non-interactive `/bin/bash` entrypoint would have exited.. The changed file is a sandbox lifecycle entrypoint. The direct shell tests exercise the changed branches, but the real failure mode involves OpenShell readiness, execability, and Docker GPU-patch supervisor reconnect behavior.
  • PRA-T2 Runtime validation — On a GPU-capable validation host, exercise the Docker GPU-patch reconnect path and verify the reconnected container keeps a long-running PID 1 while preserving the managed startup command and sandbox execability.. The changed file is a sandbox lifecycle entrypoint. The direct shell tests exercise the changed branches, but the real failure mode involves OpenShell readiness, execability, and Docker GPU-patch supervisor reconnect behavior.
  • PRA-T3 Runtime validation — Update `test/dcode-start-keepalive.test.ts` to use a temp `start.sh` fixture and assert the generated runtime env file lives under the test temp directory while `/tmp/nemoclaw-proxy-env.sh` is not touched.. The changed file is a sandbox lifecycle entrypoint. The direct shell tests exercise the changed branches, but the real failure mode involves OpenShell readiness, execability, and Docker GPU-patch supervisor reconnect behavior.
  • PRA-T4 Keepalive test mutates the real host /tmp runtime-env path — Patch this test to execute a per-test temporary copy of `start.sh` whose `local target=/tmp/nemoclaw-proxy-env.sh` and `mktemp /tmp/nemoclaw-proxy-env.XXXXXX` template are rewritten under `fs.mkdtempSync(...)`, then clean up only that temp directory. Reuse or duplicate the existing `makeStartScriptFixture(tempDir)` pattern from `test/langchain-deepagents-code-image.test.ts` while preserving direct execution of the script for ENTRYPOINT-contract coverage.
  • PRA-T5 Remove unnecessary @ts-nocheck from the new test — Delete `// @ts-nocheck`; if a concrete type error remains, fix that local type issue rather than suppressing the whole file.
  • PRA-T6 Acceptance clause — `agents/langchain-deepagents-code/start.sh`: when run with no command (the sandbox's long-running entrypoint), `exec sleep infinity` instead of a self-exiting `/bin/bash`, so the terminal-runtime sandbox stays Ready and exec-able. — add test evidence or identify existing coverage. The diff changes the no-arg branch to `exec sleep infinity`, and `test/dcode-start-keepalive.test.ts` expects a no-arg invocation to be killed by timeout with `SIGTERM` and `status === null`. Coverage is partial because the test currently mutates the host-global `/tmp/nemoclaw-proxy-env.sh` path and no checked-in test in this PR creates an OpenShell sandbox to verify Ready/execable behavior.
  • PRA-T7 Acceptance clause — Deep Agents Code is invoked on demand via `openshell sandbox exec`, independent of the entrypoint process. — add test evidence or identify existing coverage. `start.sh` does not invoke Deep Agents Code in the no-arg branch and instead idles with `sleep infinity`; `agents/langchain-deepagents-code/manifest.yaml` declares a terminal runtime with `interactive_command: "dcode"` and `headless_command: "dcode -n"`. Existing nearby tests cover the terminal runtime contract and smoke commands, but this PR does not add checked-in runtime coverage that creates a sandbox and verifies `openshell sandbox exec`.
  • PRA-T8 Acceptance clause — `test/dcode-start-keepalive.test.ts`: asserts the no-args entrypoint stays alive (killed by timeout, not self-exited) and still execs an explicit command. — add test evidence or identify existing coverage. The new test file contains both assertions: the no-arg test checks `result.signal === "SIGTERM"` and `result.status === null`, and the explicit-command test checks `status === 0` and stdout includes `RAN_CMD`. Coverage is weakened by the non-hermetic global `/tmp/nemoclaw-proxy-env.sh` side effect tracked in the findings.
Since last review details

Current findings, using the urgency labels above:

PRA-1 Resolve/justify — Source-of-truth review needed: Keepalive test runtime-env cleanup

  • Location: not file-specific
  • Category: architecture
  • Problem: The advisor marked localized patch analysis as needs_followup.
  • Impact: A localized workaround can preserve or hide an invalid state when the source boundary is unclear.
  • Recommended action: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Inspect the localized patch and source-of-truth review fields for a concrete invalid state, source boundary, source-fix constraint, regression test, and removal condition.
  • Missing regression test: Covered by the finding requesting an assertion that the temp env file is created under the test temp directory and the literal `/tmp/nemoclaw-proxy-env.sh` path is untouched.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Inspect the localized patch and source-of-truth review fields for a concrete invalid state, source boundary, source-fix constraint, regression test, and removal condition.
  • Evidence: `test/dcode-start-keepalive.test.ts` defines `RUNTIME_ENV_FILE = "/tmp/nemoclaw-proxy-env.sh"` and deletes it in `afterEach`; `test/langchain-deepagents-code-image.test.ts` has a temp fixture that rewrites this path.

PRA-2 Resolve/justify — Keepalive test mutates the real host /tmp runtime-env path

  • Location: test/dcode-start-keepalive.test.ts:19
  • Category: tests
  • Problem: The new test spawns the repository `start.sh` directly. That script always runs `prepare_runtime_env`, which writes `/tmp/nemoclaw-proxy-env.sh`, and the test then unconditionally removes that same hardcoded path in `afterEach`. Nearby Deep Agents Code image tests already avoid this by creating a temporary `start.sh` fixture that rewrites both the runtime-env target and the `mktemp` template into a per-test directory.
  • Impact: A local or parallel test run can overwrite or delete `/tmp/nemoclaw-proxy-env.sh` created by a developer, another test, or a sandbox/runtime-env validation. It can also materialize selected host env-derived proxy/CA/project values into a predictable global `/tmp` file, weakening test isolation and masking runtime-env bugs.
  • Recommended action: Patch this test to execute a per-test temporary copy of `start.sh` whose `local target=/tmp/nemoclaw-proxy-env.sh` and `mktemp /tmp/nemoclaw-proxy-env.XXXXXX` template are rewritten under `fs.mkdtempSync(...)`, then clean up only that temp directory. Reuse or duplicate the existing `makeStartScriptFixture(tempDir)` pattern from `test/langchain-deepagents-code-image.test.ts` while preserving direct execution of the script for ENTRYPOINT-contract coverage.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Read `test/dcode-start-keepalive.test.ts` and confirm it no longer defines or removes `/tmp/nemoclaw-proxy-env.sh`; the spawned script path should be a temp fixture, and the generated env file should live under the test temp directory.
  • Missing regression test: Add an assertion in the keepalive test fixture that the temp env file is created under the test temp directory and that the literal `/tmp/nemoclaw-proxy-env.sh` path is not created, overwritten, or removed by this test.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Read `test/dcode-start-keepalive.test.ts` and confirm it no longer defines or removes `/tmp/nemoclaw-proxy-env.sh`; the spawned script path should be a temp fixture, and the generated env file should live under the test temp directory.
  • Evidence: `test/dcode-start-keepalive.test.ts` defines `const RUNTIME_ENV_FILE = "/tmp/nemoclaw-proxy-env.sh"`, removes it in `afterEach`, and spawns `START_SCRIPT`; `agents/langchain-deepagents-code/start.sh` still contains `local target=/tmp/nemoclaw-proxy-env.sh` and `mktemp /tmp/nemoclaw-proxy-env.XXXXXX`.

PRA-3 Resolve/justify — Sandbox Ready/execable acceptance is only unit-level covered

  • Location: agents/langchain-deepagents-code/start.sh:85
  • Category: acceptance
  • Problem: The code and new unit test cover the no-arg branch becoming a long-running `sleep infinity`, but the PR's acceptance statement also depends on the OpenShell sandbox lifecycle: the terminal-runtime sandbox should remain Ready and `openshell sandbox exec` should work after the old non-interactive `/bin/bash` would have exited. No checked-in test in this PR exercises that runtime boundary.
  • Impact: A regression in the NemoClaw/OpenShell create command, Docker GPU-patch reconnect path, or sandbox readiness handling could still leave the Deep Agents Code sandbox non-execable even though the direct shell unit test passes.
  • Recommended action: Add or identify targeted runtime/integration validation for this changed behavior: create a LangChain Deep Agents Code sandbox through NemoClaw/OpenShell with the managed startup command, wait past the old bash self-exit interval, and verify the sandbox remains Ready and `openshell sandbox exec <name> -- true` succeeds. If GPU reconnect is the affected path, validate that path on a GPU-capable host without relying on external job status in the PR review surface.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Search the checked-in tests for a Deep Agents Code sandbox creation that runs the managed `nemoclaw-start` entrypoint and then performs `openshell sandbox exec <name> -- true`; the current changed tests only spawn `start.sh` locally.
  • Missing regression test: Add a runtime/integration test or documented checked-in scenario that creates the Deep Agents Code sandbox, observes that PID 1 remains long-running after startup, and verifies an exec command succeeds after the prior `/bin/bash` no-TTY fallback would have exited.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Search the checked-in tests for a Deep Agents Code sandbox creation that runs the managed `nemoclaw-start` entrypoint and then performs `openshell sandbox exec <name> -- true`; the current changed tests only spawn `start.sh` locally.
  • Evidence: `test/dcode-start-keepalive.test.ts` asserts `result.signal === "SIGTERM"` for direct no-arg execution and `status === 0` for an explicit command, but the changed files do not create an OpenShell sandbox or verify `openshell sandbox exec` behavior.

PRA-4 Improvement — Remove unnecessary @ts-nocheck from the new test

  • Location: test/dcode-start-keepalive.test.ts:1
  • Category: tests
  • Problem: The new TypeScript test disables type checking for the entire file, but the file uses standard Node and Vitest APIs and has no visible type-heavy boundary that requires suppression.
  • Impact: Future mistakes in this test, such as misspelled spawn result fields or incorrect helper return shapes, would be hidden from TypeScript instead of failing during normal test/typecheck workflows.
  • Suggested action: Delete `// @ts-nocheck`; if a concrete type error remains, fix that local type issue rather than suppressing the whole file.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Read the first few lines of `test/dcode-start-keepalive.test.ts` and confirm the file no longer contains `// @ts-nocheck`.
  • Missing regression test: No new behavioral regression test is needed; once the directive is removed, the existing TypeScript/Vitest checking for this test file should cover type mistakes.
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: `test/dcode-start-keepalive.test.ts` starts with `// @ts-nocheck` while only importing `spawnSync`, `fs`, `path`, and Vitest helpers.

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 24, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: cloud-onboard-e2e
Optional E2E: sandbox-survival-e2e, gpu-e2e

Dispatch hint: cloud-onboard-e2e

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: medium

Required E2E

  • cloud-onboard-e2e (medium): Run the hosted install/onboard sandbox lifecycle smoke because this PR changes a sandbox entrypoint contract. This is the closest existing merge-blocking E2E for real OpenShell sandbox creation, readiness, security checks, and hosted inference after install.

Optional E2E

  • sandbox-survival-e2e (medium): Adjacent confidence for sandbox lifecycle stability across gateway restart/recovery. It does not directly select the Deep Agents Code image, so it is useful but not a substitute for Deep Agents-specific coverage.
  • gpu-e2e (high): Optional only: the PR rationale mentions GPU supervisor reconnect posture. This validates the GPU sandbox path, but it exercises the OpenClaw/Ollama flow rather than the Deep Agents Code entrypoint and is relatively expensive.

New E2E recommendations

  • Deep Agents Code sandbox lifecycle (high): Existing E2E jobs appear to cover generic/OpenClaw sandbox lifecycle, while the cloud experimental Deep Agents checks skip unless the sandbox is actually a Deep Agents Code sandbox. Add an E2E that onboards with NEMOCLAW_AGENT=langchain-deepagents-code, verifies the sandbox reaches/stays Ready with the no-arg entrypoint, runs openshell sandbox exec <name> -- dcode --version, and confirms the sandbox does not transition to Error after stdin EOF.
    • Suggested test: deepagents-code-keepalive-e2e

Dispatch hint

  • Workflow: nightly-e2e.yaml
  • jobs input: cloud-onboard-e2e

@github-actions

github-actions Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Recommendation

Required Vitest E2E scenarios: None
Optional Vitest E2E scenarios: None

Workflow run

Full Vitest E2E advisor summary

Vitest E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required Vitest E2E scenarios

  • None. No live-supported Vitest scenario in e2e-vitest-scenarios.yaml currently exercises the LangChain Deep Agents Code sandbox entrypoint changed by this PR. The matching typed scenario exists for langchain-deepagents-code, but trusted runtime-support only wires cloud-openclaw scenarios for live registry execution, so a targeted dispatch would not validate this change. The added test is outside test/e2e-scenario and is not a dispatchable Vitest E2E scenario.

Optional Vitest E2E scenarios

  • None.

Relevant changed files

  • agents/langchain-deepagents-code/start.sh

@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: 1

🧹 Nitpick comments (1)
test/dcode-start-keepalive.test.ts (1)

1-16: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Avoid @ts-nocheck for the whole test file.

This suppresses all type checking in a small test that should be easy to keep typed. If import.meta.dirname is the blocker, switch to a typed fileURLToPath(import.meta.url)/path.dirname(...) helper and keep the file checked.

Suggested change
-// `@ts-nocheck`
 // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
 // SPDX-License-Identifier: Apache-2.0

 import { spawnSync } from "node:child_process";
 import fs from "node:fs";
 import path from "node:path";
+import { fileURLToPath } from "node:url";
 import { afterEach, describe, expect, it } from "vitest";

 const START_SCRIPT = path.join(
-  import.meta.dirname,
+  path.dirname(fileURLToPath(import.meta.url)),
   "..",
   "agents",
   "langchain-deepagents-code",
   "start.sh",
 );
🤖 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/dcode-start-keepalive.test.ts` around lines 1 - 16, The test file is
using a blanket `@ts-nocheck` to work around typing, which should be removed so
the file stays type-checked. Update the START_SCRIPT setup in
dcode-start-keepalive.test.ts by replacing import.meta.dirname with a typed
fileURLToPath(import.meta.url) plus path.dirname(...) helper, keeping the
existing spawnSync, fs, and path usage intact. Ensure the test remains fully
typed without suppressing checks across the whole file.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@test/dcode-start-keepalive.test.ts`:
- Around line 34-38: The keepalive tests are invoking START_SCRIPT through bash
instead of exercising the real ENTRYPOINT path, so they can miss shebang or
execute-bit regressions. Update the spawnSync call(s) in
dcode-start-keepalive.test.ts to execute START_SCRIPT directly, matching the
runtime contract used by the Dockerfile entrypoint, and keep the existing
timeout/encoding behavior unchanged.

---

Nitpick comments:
In `@test/dcode-start-keepalive.test.ts`:
- Around line 1-16: The test file is using a blanket `@ts-nocheck` to work around
typing, which should be removed so the file stays type-checked. Update the
START_SCRIPT setup in dcode-start-keepalive.test.ts by replacing
import.meta.dirname with a typed fileURLToPath(import.meta.url) plus
path.dirname(...) helper, keeping the existing spawnSync, fs, and path usage
intact. Ensure the test remains fully typed without suppressing checks across
the whole file.
🪄 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: a87a916f-7bfb-465c-8bcd-2df1cd01448e

📥 Commits

Reviewing files that changed from the base of the PR and between 6fb9754 and de8748a.

📒 Files selected for processing (2)
  • agents/langchain-deepagents-code/start.sh
  • test/dcode-start-keepalive.test.ts

Comment thread test/dcode-start-keepalive.test.ts Outdated
…ntract

Address CodeRabbit review on #5725: spawn start.sh directly instead of via
`bash` so the keep-alive tests also exercise the real ENTRYPOINT path
(/usr/local/bin/nemoclaw-start) and catch shebang or execute-bit regressions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Jason Ma <jama@nvidia.com>
@jason-ma-nv

Copy link
Copy Markdown
Collaborator Author

Addressed the CodeRabbit review in 6758079: the keep-alive tests now spawn start.sh directly instead of via bash, so they also exercise the real ENTRYPOINT contract (/usr/local/bin/nemoclaw-start) and would catch a broken shebang or execute-bit regression. Tests still pass.

@wscurran wscurran added area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery bug-fix PR fixes a bug or regression labels Jun 24, 2026
@wscurran wscurran added the integration: dcode LangChain Deep Code integration behavior label Jun 24, 2026
@cv
cv merged commit 1f88302 into main Jun 24, 2026
40 checks passed
@cv
cv deleted the auto/fix-dcode-sandbox-keepalive branch June 24, 2026 23:24
@miyoungc miyoungc mentioned this pull request Jun 25, 2026
21 tasks
cv pushed a commit that referenced this pull request Jun 25, 2026
<!-- markdownlint-disable MD041 -->
## Summary
Refreshes the v0.0.68 docs with release notes, Microsoft Teams messaging
guidance, and generated support-matrix coverage.
Also corrects the Hermes generated command reference so `sessions
export` examples match Hermes-only behavior while keeping the shared
command heading compatible with CLI parity checks.

## Changes
- #5585 -> `docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/platform-support.mdx`: Documents experimental Microsoft
Teams channel setup, Bot Framework credentials, webhook forwarding,
local `MSTEAMS_PORT` conflicts, and the generated integration support
row.
- #5526 -> `docs/reference/commands.mdx`,
`docs/reference/commands-nemohermes.mdx`: Keeps Hermes `sessions export`
examples on the supported single-JSONL export path while preserving the
canonical shared CLI heading.
- #5044 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for installer onboarding failure propagation.
- #5641 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for fresh recovery after pre-sandbox installer interruption.
- #5673 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for explicit deny-all messaging manifests.
- #5743 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for unsupported-agent channel-add rejection.
- #5252 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for Hermes `gateway-token` dashboard guidance.
- #5659 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for local OpenClaw `agent` wrapper help.
- #5661 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for default extra-agent paths.
- #5669 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for Deep Agents Code branding.
- #5672 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for hosted-compatible default model ID preservation.
- #5725 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for Deep Agents Code sandbox liveness.
- #5644 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for DGX Spark managed-vLLM express install defaults.
- #5712 -> `docs/about/release-notes.mdx`,
`docs/reference/platform-support.mdx`: Adds v0.0.68 release-note
coverage for the canonical support matrix and updates the matrix source
with Teams.

## Type of Change

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

## Quality Gates
<!-- Check all that apply. For any "covered by existing tests", "not
applicable", or waiver entry, add a brief justification on the same line
or in the Changes section. -->
- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: docs-only release refresh;
no runtime code 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
<!-- Check each item you ran and confirmed. Leave unchecked items you
skipped. Doc-only changes do not require npm test unless you ran it. -->
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [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) — `npm
run docs` passed with 0 errors; Fern reported the existing light-mode
accent contrast warning.
- [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)

Additional verification:
- `python3 scripts/generate-platform-docs.py --check` passed.
- `npm run docs:sync-agent-variants` passed.
- `bash test/e2e/e2e-cloud-experimental/check-docs.sh --only-cli`
passed.
- `npm run docs` passed with 0 errors and one Fern theme warning:
light-mode accent contrast ratio is 2.41:1 and should be at least 3:1.
- `npm run build:cli` refreshed local untracked `dist/` artifacts after
rebase; no tracked files changed.
- `npm run typecheck:cli` passed.
- Normal commit and push hooks passed after the local CLI rebuild.

---
<!-- 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: Miyoung Choi <miyoungc@nvidia.com>

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

## Summary by CodeRabbit

* **New Features**
* Added **Microsoft Teams** as an experimental messaging channel,
including manifest-first onboarding, local port routing/conflict
handling, sandbox delivery controls, and policy preset support.

* **Documentation**
* Expanded messaging-channel setup for Teams (prerequisites,
credential/webhook setup, wizard flow, and add/remove commands).
* Updated reference docs for **agent-specific** session export examples
(OpenClaw vs Hermes).
* Refreshed platform support guidance and added the latest release-notes
entry.

<!-- 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
…int (NVIDIA#5725)

## Summary
The Deep Agents Code (`langchain-deepagents-code`) sandbox entrypoint
(`agents/langchain-deepagents-code/start.sh`) execs a bare `/bin/bash`
when invoked with no command. As a terminal-runtime agent it has no
daemon, so this bash is the sandbox's sole foreground process — but a
non-interactive bash with no TTY and EOF on stdin exits immediately,
leaving the sandbox with no persistent process. OpenShell then flaps it
into the Error phase, which breaks the Docker GPU-patch supervisor
reconnect (`openshell sandbox exec -- true`) so a GPU-enabled Deep
Agents onboard aborts with "supervisor did not reconnect to the
GPU-enabled container". This idles on a stable `sleep infinity` instead.

## Related Issue
Related to NVIDIA#5717
<!-- Surfaced while investigating NVIDIA#5717's deepagents GPU-patch reconnect
failure. This fixes the sandbox-instability root cause; see Verification
for the GPU-status caveat. -->

## Changes
- `agents/langchain-deepagents-code/start.sh`: when run with no command
(the sandbox's long-running entrypoint), `exec sleep infinity` instead
of a self-exiting `/bin/bash`, so the terminal-runtime sandbox stays
Ready and exec-able. Explicitly-supplied commands still `exec "$@"`.
Deep Agents Code is invoked on demand via `openshell sandbox exec`,
independent of the entrypoint process.
- `test/dcode-start-keepalive.test.ts`: asserts the no-args entrypoint
stays alive (killed by timeout, not self-exited) and still execs an
explicit command.

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

## Verification
<!-- Check each item you ran and confirmed. Leave unchecked items you
skipped. Doc-only changes do not require npm test unless you ran it. -->
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [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
- [ ] 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)

<!-- Verified end-to-end on a DGX Spark (aarch64, GB10): pre-fix the
deepagents GPU onboard aborted at the GPU-patch supervisor reconnect
("did not reconnect ... Error phase"); post-fix the sandbox reaches
Ready, container PID 1 is `sleep infinity`, and `nemoclaw <name> exec`
returns successfully. The local red->green test fails against the old
`/bin/bash` fallback and passes with the fix. NOTE: NVIDIA#5717's GPU-status
display could not be re-confirmed in the same session because the DGX's
GPU went offline mid-verification (`nvidia-smi: No devices were found`);
this PR fixes the sandbox-instability/reconnect root cause, and a
GPU-healthy host is needed to confirm it also resolves the GPU-posture
reporting. -->

---
<!-- DCO sign-off required by CI. Run: git config user.name && git
config user.email -->
Signed-off-by: Jason Ma <jama@nvidia.com>

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

* **Bug Fixes**
* Updated the sandbox entrypoint’s no-command startup behavior so it
remains running continuously, preventing unexpected exits and
instability.
* Kept behavior consistent when a command is provided, ensuring it still
executes and completes normally.
* **Tests**
* Added automated coverage for both scenarios: idle/keepalive startup
and command-run startup, including validation of termination vs
successful completion.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Jason Ma <jama@nvidia.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.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
<!-- markdownlint-disable MD041 -->
## Summary
Refreshes the v0.0.68 docs with release notes, Microsoft Teams messaging
guidance, and generated support-matrix coverage.
Also corrects the Hermes generated command reference so `sessions
export` examples match Hermes-only behavior while keeping the shared
command heading compatible with CLI parity checks.

## Changes
- NVIDIA#5585 -> `docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/platform-support.mdx`: Documents experimental Microsoft
Teams channel setup, Bot Framework credentials, webhook forwarding,
local `MSTEAMS_PORT` conflicts, and the generated integration support
row.
- NVIDIA#5526 -> `docs/reference/commands.mdx`,
`docs/reference/commands-nemohermes.mdx`: Keeps Hermes `sessions export`
examples on the supported single-JSONL export path while preserving the
canonical shared CLI heading.
- NVIDIA#5044 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for installer onboarding failure propagation.
- NVIDIA#5641 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for fresh recovery after pre-sandbox installer interruption.
- NVIDIA#5673 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for explicit deny-all messaging manifests.
- NVIDIA#5743 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for unsupported-agent channel-add rejection.
- NVIDIA#5252 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for Hermes `gateway-token` dashboard guidance.
- NVIDIA#5659 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for local OpenClaw `agent` wrapper help.
- NVIDIA#5661 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for default extra-agent paths.
- NVIDIA#5669 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for Deep Agents Code branding.
- NVIDIA#5672 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for hosted-compatible default model ID preservation.
- NVIDIA#5725 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for Deep Agents Code sandbox liveness.
- NVIDIA#5644 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note
coverage for DGX Spark managed-vLLM express install defaults.
- NVIDIA#5712 -> `docs/about/release-notes.mdx`,
`docs/reference/platform-support.mdx`: Adds v0.0.68 release-note
coverage for the canonical support matrix and updates the matrix source
with Teams.

## Type of Change

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

## Quality Gates
<!-- Check all that apply. For any "covered by existing tests", "not
applicable", or waiver entry, add a brief justification on the same line
or in the Changes section. -->
- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: docs-only release refresh;
no runtime code 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
<!-- Check each item you ran and confirmed. Leave unchecked items you
skipped. Doc-only changes do not require npm test unless you ran it. -->
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [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) — `npm
run docs` passed with 0 errors; Fern reported the existing light-mode
accent contrast warning.
- [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)

Additional verification:
- `python3 scripts/generate-platform-docs.py --check` passed.
- `npm run docs:sync-agent-variants` passed.
- `bash test/e2e/e2e-cloud-experimental/check-docs.sh --only-cli`
passed.
- `npm run docs` passed with 0 errors and one Fern theme warning:
light-mode accent contrast ratio is 2.41:1 and should be at least 3:1.
- `npm run build:cli` refreshed local untracked `dist/` artifacts after
rebase; no tracked files changed.
- `npm run typecheck:cli` passed.
- Normal commit and push hooks passed after the local CLI rebuild.

---
<!-- 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: Miyoung Choi <miyoungc@nvidia.com>

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

## Summary by CodeRabbit

* **New Features**
* Added **Microsoft Teams** as an experimental messaging channel,
including manifest-first onboarding, local port routing/conflict
handling, sandbox delivery controls, and policy preset support.

* **Documentation**
* Expanded messaging-channel setup for Teams (prerequisites,
credential/webhook setup, wizard flow, and add/remove commands).
* Updated reference docs for **agent-specific** session export examples
(OpenClaw vs Hermes).
* Refreshed platform support guidance and added the latest release-notes
entry.

<!-- 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: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery 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.

4 participants