Skip to content

fix(onboard): default extra-agents workspace and agentDir when omitted - #5661

Merged
cv merged 6 commits into
mainfrom
fix/extra-agents-env-default-paths
Jun 24, 2026
Merged

fix(onboard): default extra-agents workspace and agentDir when omitted#5661
cv merged 6 commits into
mainfrom
fix/extra-agents-env-default-paths

Conversation

@laitingsheng

@laitingsheng laitingsheng commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Summary

NEMOCLAW_EXTRA_AGENTS_JSON entries that omit workspace or agentDir cause the sandbox image build to abort at generate-openclaw-config.mts because the validator rejects undefined paths. The YAML manifest path already auto-fills both fields from the agent id before encoding, so the same payload works there. This change mirrors that defaulting at the build-time validator so the env-var path accepts the terse [{id, tools}] shape too.

Related Issue

Fixes #5660

Changes

  • scripts/generate-openclaw-config.mts: in validateExtraAgents, when workspace or agentDir is omitted, derive it from expectedAgentPath(kind, id). When supplied, keep the existing absolute and canonical-equality checks; the failure message now reads "…must be a non-empty string when present".
  • test/generate-openclaw-config.test.ts: add positive tests for the both-omitted and one-supplied cases.
  • docs/reference/commands.mdx: loosen the contract for workspace and agentDir to "optional, defaults to the canonical path" while keeping the canonical-equality requirement when supplied.

Type of Change

  • Code change with doc updates
  • Code change (feature, bug fix, or refactor)
  • 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: Tinson Lai tinsonl@nvidia.com

Summary by CodeRabbit

  • Documentation
    • Updated the OpenClaw “Extra OpenClaw agents” reference to support both array and object payload formats, clarify optional workspace/agentDir with deterministic default paths, and revise schema rules for model and subagents. Also updated how maxSpawnDepth is configured under defaults.subagents.
  • Bug Fixes
    • Improved extra-agent validation/normalization: omitted workspace/agentDir are now defaulted automatically, and any provided values must be absolute and match the expected canonical paths.
  • Tests
    • Added coverage for defaulting behavior across multiple extra-agent payload shapes, including legacy formats.

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@laitingsheng laitingsheng added area: cli Command line interface, flags, terminal UX, or output bug-fix PR fixes a bug or regression integration: openclaw OpenClaw integration behavior labels Jun 23, 2026
@github-actions

Copy link
Copy Markdown
Contributor

@github-code-quality

github-code-quality Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

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

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

TypeScript / code-coverage/cli

The overall coverage in the fix/extra-agents-env... branch is 46%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main fix/extra-agents-env... 0f3df66 +/-
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 67%
src/lib/onboard/preflight.ts 64%
src/lib/actions...licy-channel.ts 56%
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 00:09 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@coderabbitai

coderabbitai Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

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

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

NEMOCLAW_EXTRA_AGENTS_JSON extra-agent validation is relaxed so that workspace and agentDir fields are optional; when omitted, canonical paths derived from the agent id are auto-assigned. Reference docs are updated to reflect the reduced required-field set and clarify where subagents.maxSpawnDepth is accepted, and a new test verifies the defaulting behavior across multiple payload shapes.

Changes

Optional workspace/agentDir for extra agents

Layer / File(s) Summary
Script auto-fill for missing workspace/agentDir
scripts/generate-openclaw-config.mts
validateExtraAgents computes canonical workspace/agentDir paths up front before field-level checks. When a field is undefined, the canonical value is assigned immediately instead of raising a validation error. When a field is provided, it must be a non-empty absolute path and resolve to the same canonical target.
Updated schema and example for optional paths
docs/reference/commands.mdx
Schema documentation clarified to list only id and tools as required for non-main entries; workspace and agentDir documented as optional with defaults derived from id. Allowed entry fields updated to include optional model, and subagents field rules revised to exclude maxSpawnDepth per-agent (moved to defaults.subagents only). Example JSON updated to demonstrate defaults.subagents: { "maxSpawnDepth": 1 } structure.
Test suite: extra-agent path defaulting
test/generate-openclaw-config-path-defaults.test.ts
New Vitest suite constructs temporary filesystem with stub openclaw binary, invokes main() with base64-encoded extra-agents JSON covering fully-omitted paths, partially-omitted paths, legacy allow-only format, and object-shaped payloads. Asserts that workspace and agentDir are correctly auto-filled from agent id in generated .openclaw/openclaw.json.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐰 When workspace was missing, the build went splat,
Now defaults are filled — imagine that!
An id becomes a path with ease,
No more mid-build failures to displease.
The rabbit hops on, config in paw,
Optional fields — hooray, no flaw! 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: defaulting workspace and agentDir fields in extra-agents when omitted, which directly addresses the core fix in the PR.
Linked Issues check ✅ Passed The PR fully addresses issue #5660: it fixes the validation failure by making workspace and agentDir optional with sensible defaults derived from agent ID, allowing terse agent specifications to work during sandbox image build.
Out of Scope Changes check ✅ Passed All changes are directly scoped to fixing the validation failure in NEMOCLAW_EXTRA_AGENTS_JSON handling: validator logic updates, test coverage for the new defaulting behavior, and documentation clarifications.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/extra-agents-env-default-paths

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

@github-actions

github-actions Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: cloud-onboard-e2e
Optional E2E: sessions-agents-cli-e2e

Dispatch hint: cloud-onboard-e2e

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • cloud-onboard-e2e (high): Runs hosted OpenClaw onboarding from source and exercises the image/config generation path that invokes generate-openclaw-config.mts. This is the best existing merge-blocking E2E for detecting regressions in OpenClaw config generation during real onboarding.

Optional E2E

  • sessions-agents-cli-e2e (high): Adjacent confidence for OpenClaw multi-agent behavior after onboarding: validates real sandbox agent add/list/delete and sessions routing. It does not directly cover build-time NEMOCLAW_EXTRA_AGENTS_JSON defaults, so it is useful but not required.

New E2E recommendations

  • OpenClaw extra agents onboarding (medium): No existing E2E appears to onboard a sandbox with NEMOCLAW_EXTRA_AGENTS_JSON containing secondary agents that omit workspace and/or agentDir, then verify the generated openclaw.json and in-sandbox agent workspaces. The added unit test covers generator output, but not the full hosted onboarding/image-build/runtime path.
    • Suggested test: Add an OpenClaw extra-agents onboarding E2E that sets NEMOCLAW_EXTRA_AGENTS_JSON to both array and object payloads with omitted paths, runs hosted onboarding, verifies agents.list contains canonical workspace/agentDir values, and confirms the secondary agent is visible/usable in the sandbox.

Dispatch hint

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

@github-actions

github-actions Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Recommendation

Required Vitest E2E scenarios: ubuntu-repo-cloud-openclaw
Optional Vitest E2E scenarios: None

Dispatch required Vitest E2E scenarios:

  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw

Workflow run

Full Vitest E2E advisor summary

Vitest E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: medium

Required Vitest E2E scenarios

  • ubuntu-repo-cloud-openclaw: The PR changes scripts/generate-openclaw-config.mts, which is used during OpenClaw onboarding to emit the runtime OpenClaw configuration. The smallest live-supported typed Vitest scenario that exercises the affected OpenClaw config-generation and boot path is ubuntu-repo-cloud-openclaw.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw

Optional Vitest E2E scenarios

  • None.

Relevant changed files

  • scripts/generate-openclaw-config.mts

@github-actions

github-actions Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings

Merge posture: No blocking advisor findings
Primary next action: No advisor follow-up required beyond maintainer review.
Open items: 0 required · 0 warnings · 0 suggestions · 0 test follow-ups
Since last review: 1 prior item resolved · 0 still apply · 0 new items found

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.

@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

🤖 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 `@docs/reference/commands.mdx`:
- Around line 2169-2170: Update the documentation for the workspace and agentDir
parameters to clarify that the validator accepts absolute paths that resolve to
the canonical paths, rather than requiring exact literal string matches. Change
the wording from "must equal that exact value" to reflect that paths resolving
to the canonical paths are accepted, making the documentation consistent with
the actual runtime path resolution behavior.
🪄 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: 0fc5b37f-eeae-4083-a8a3-63e78c5c3337

📥 Commits

Reviewing files that changed from the base of the PR and between a9f31e4 and db4df92.

📒 Files selected for processing (3)
  • docs/reference/commands.mdx
  • scripts/generate-openclaw-config.mts
  • test/generate-openclaw-config.test.ts

Comment thread docs/reference/commands.mdx Outdated
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
test/generate-openclaw-config-path-defaults.test.ts (1)

74-90: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the symmetric partial-default case (agentDir provided, workspace omitted).

Line 74 currently validates omitted-both and workspace-provided cases. Add an agentDir-provided entry too, so both optional path fields are independently regression-tested.

Suggested test extension
   it("auto-fills workspace and agentDir from id when omitted (full or partial)", () => {
     const config = runConfigScript({
       NEMOCLAW_EXTRA_AGENTS_JSON_B64: extraAgentsB64([
         { id: "alpha", tools: TOOLS_OK },
         { id: "beta", workspace: "/sandbox/.openclaw/workspace-beta", tools: TOOLS_OK },
+        { id: "gamma", agentDir: "/sandbox/.openclaw/agents/gamma", tools: TOOLS_OK },
       ]),
     });
@@
     expect(config.agents.list[2]).toMatchObject({
       id: "beta",
       workspace: "/sandbox/.openclaw/workspace-beta",
       agentDir: "/sandbox/.openclaw/agents/beta",
     });
+    expect(config.agents.list[3]).toMatchObject({
+      id: "gamma",
+      workspace: "/sandbox/.openclaw/workspace-gamma",
+      agentDir: "/sandbox/.openclaw/agents/gamma",
+    });
   });
🤖 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/generate-openclaw-config-path-defaults.test.ts` around lines 74 - 90,
The test "auto-fills workspace and agentDir from id when omitted (full or
partial)" currently tests the cases where both paths are omitted and where
workspace is provided but agentDir is omitted. Add a third test entry to the
extraAgentsB64 array with an agent that has an agentDir specified but workspace
omitted, then add a corresponding expect statement for config.agents.list[3] to
verify that the workspace field is auto-filled from the id while the provided
agentDir is preserved. This ensures both optional path fields are independently
tested for regression.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@test/generate-openclaw-config-path-defaults.test.ts`:
- Around line 74-90: The test "auto-fills workspace and agentDir from id when
omitted (full or partial)" currently tests the cases where both paths are
omitted and where workspace is provided but agentDir is omitted. Add a third
test entry to the extraAgentsB64 array with an agent that has an agentDir
specified but workspace omitted, then add a corresponding expect statement for
config.agents.list[3] to verify that the workspace field is auto-filled from the
id while the provided agentDir is preserved. This ensures both optional path
fields are independently tested for regression.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: a2ec93bb-19b8-4b10-acba-1e5027850855

📥 Commits

Reviewing files that changed from the base of the PR and between db4df92 and 4926038.

📒 Files selected for processing (1)
  • test/generate-openclaw-config-path-defaults.test.ts

…r legacy and object payloads

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
docs/reference/commands.mdx (2)

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

Put one sentence per source line.

Line 2177 contains two sentences on the same line; split them so each sentence is on its own line.

As per coding guidelines, "Keep one sentence per line in Markdown and MDX source files."

🤖 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 `@docs/reference/commands.mdx` at line 2177, Line 2177 in the
docs/reference/commands.mdx file contains two sentences that need to be split.
The first sentence ending with "per-agent `subagents` object." should remain on
its own line, and the second sentence starting with "To set it, use the object
payload shape..." should be moved to a new line below it. This follows the
markdown guideline of keeping one sentence per line for better source file
readability.

Source: Coding guidelines


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

Use active voice for this behavior statement.

Line 2163 is passive (“is always written first”); rewrite it to active voice.

As per path instructions, "Active voice required. Flag passive constructions."

🤖 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 `@docs/reference/commands.mdx` at line 2163, The sentence on line 2163 contains
passive voice in the phrase "is always written first" which obscures the actor
performing the action. Rewrite this phrase using active voice by identifying who
or what performs the action (for example, replacing "is always written first"
with an active construction like "the system always writes" or "we always write"
depending on context). Ensure the rewritten sentence maintains the same meaning
while clearly stating the subject performing the action of writing the canonical
main entry first.

Source: Path instructions

🤖 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 `@docs/reference/commands.mdx`:
- Line 2177: Line 2177 in the docs/reference/commands.mdx file contains two
sentences that need to be split. The first sentence ending with "per-agent
`subagents` object." should remain on its own line, and the second sentence
starting with "To set it, use the object payload shape..." should be moved to a
new line below it. This follows the markdown guideline of keeping one sentence
per line for better source file readability.
- Line 2163: The sentence on line 2163 contains passive voice in the phrase "is
always written first" which obscures the actor performing the action. Rewrite
this phrase using active voice by identifying who or what performs the action
(for example, replacing "is always written first" with an active construction
like "the system always writes" or "we always write" depending on context).
Ensure the rewritten sentence maintains the same meaning while clearly stating
the subject performing the action of writing the canonical main entry first.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 5075bf0e-d89d-49f5-8618-d1a05818a268

📥 Commits

Reviewing files that changed from the base of the PR and between 4926038 and ecaba9d.

📒 Files selected for processing (2)
  • docs/reference/commands.mdx
  • test/generate-openclaw-config-path-defaults.test.ts

…ection

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@jyaunches jyaunches added v0.0.68 and removed v0.0.67 labels Jun 24, 2026
@cv
cv merged commit cc4b3f4 into main Jun 24, 2026
42 checks passed
@cv
cv deleted the fix/extra-agents-env-default-paths branch June 24, 2026 21:06
@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 -->
@wscurran wscurran added the NV QA Bugs found by the NVIDIA QA Team label Jun 26, 2026
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
NVIDIA#5661)

## Summary

`NEMOCLAW_EXTRA_AGENTS_JSON` entries that omit `workspace` or `agentDir`
cause the sandbox image build to abort at `generate-openclaw-config.mts`
because the validator rejects undefined paths. The YAML manifest path
already auto-fills both fields from the agent id before encoding, so the
same payload works there. This change mirrors that defaulting at the
build-time validator so the env-var path accepts the terse `[{id,
tools}]` shape too.

## Related Issue

Fixes NVIDIA#5660

## Changes

- `scripts/generate-openclaw-config.mts`: in `validateExtraAgents`, when
`workspace` or `agentDir` is omitted, derive it from
`expectedAgentPath(kind, id)`. When supplied, keep the existing absolute
and canonical-equality checks; the failure message now reads `"…must be
a non-empty string when present"`.
- `test/generate-openclaw-config.test.ts`: add positive tests for the
both-omitted and one-supplied cases.
- `docs/reference/commands.mdx`: loosen the contract for `workspace` and
`agentDir` to "optional, defaults to the canonical path" while keeping
the canonical-equality requirement when supplied.

## Type of Change

- [x] Code change with doc updates
- [ ] Code change (feature, bug fix, or refactor)
- [ ] 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)

---
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>

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

* **Documentation**
* Updated the OpenClaw “Extra OpenClaw agents” reference to support both
array and object payload formats, clarify optional
`workspace`/`agentDir` with deterministic default paths, and revise
schema rules for `model` and `subagents`. Also updated how
`maxSpawnDepth` is configured under `defaults.subagents`.
* **Bug Fixes**
* Improved extra-agent validation/normalization: omitted
`workspace`/`agentDir` are now defaulted automatically, and any provided
values must be absolute and match the expected canonical paths.
* **Tests**
* Added coverage for defaulting behavior across multiple extra-agent
payload shapes, including legacy formats.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- 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: cli Command line interface, flags, terminal UX, or output bug-fix PR fixes a bug or regression integration: openclaw OpenClaw integration behavior NV QA Bugs found by the NVIDIA QA Team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Ubuntu 24.04][Onboard] NEMOCLAW_EXTRA_AGENTS_JSON causes sandbox image build to fail at generate-openclaw-config.mts

4 participants