Skip to content

feat(cli): add Deep Agents aliases - #5881

Merged
cv merged 6 commits into
mainfrom
feat/deepagents-agent-aliases
Jun 26, 2026
Merged

feat(cli): add Deep Agents aliases#5881
cv merged 6 commits into
mainfrom
feat/deepagents-agent-aliases

Conversation

@cv

@cv cv commented Jun 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a nemo-deepagents host CLI alias for the LangChain Deep Agents Code runtime and teaches onboarding to accept common user-facing agent aliases. This lets users run nemo-deepagents onboard or shorter forms such as nemoclaw onboard --agent dcode, --agent deepagents, and --agent langchain instead of remembering langchain-deepagents-code.

Changes

  • Registered nemo-deepagents as an npm bin that reuses the existing bin/nemoclaw.js launcher and selects Deep Agents Code when invoked through that symlink.
  • Added canonical agent alias resolution for --agent and NEMOCLAW_AGENT, including nemohermes, dcode, deepagents, deepagents-code, langchain, and related variants.
  • Updated CLI branding, installer/update branding, onboard --agent help, and unknown-agent diagnostics for the alias set.
  • Updated Deep Agents quickstart, command reference, and platform support docs; adjusted platform-doc validation to allow documented aliases.
  • Added/updated tests for CLI alias behavior, onboarding arg parsing/help, agent definition alias resolution, update copy, oclif help, and platform-doc validation.

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)

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • 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: self-review; changes are limited to agent selector canonicalization, launcher branding, installer alias selection, docs, and tests, with no credential handling or network-policy enforcement changes.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

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)
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • 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)

Verification commands run:

  • npm run build:cli
  • npx vitest run test/nemohermes-alias.test.ts test/nemo-deepagents-alias.test.ts test/update.test.ts test/cli-oclif-compatibility.test.ts src/lib/cli/branding.test.ts src/lib/actions/update.test.ts src/lib/agent/defs.test.ts src/lib/onboard/legacy-command.test.ts src/lib/onboard/agent-flag-help.test.ts src/lib/onboard/command-support.test.ts test/cli/dispatch-basics.test.ts test/generate-platform-docs.test.ts --reporter=dot
  • NEMOCLAW_RUN_INSTALLER_TESTS=1 npx vitest run --project installer-integration test/install-preflight.test.ts --reporter=dot
  • npm run typecheck:cli
  • npm run validate:configs
  • python3 scripts/generate-platform-docs.py --check
  • npm run docs (passed; Fern reported two hidden warnings)
  • Commit hooks passed; latest push hooks passed.

Signed-off-by: Carlos Villela cvillela@nvidia.com

Summary by CodeRabbit

  • New Features
    • Added a nemo-deepagents CLI alias for Deep Agents with matching branding, help, onboarding, uninstall, and update flows.
  • Documentation
    • Updated quickstart and command/reference docs to use the Deep Agents CLI wrapper and clarified --agent alias vs canonical name behavior.
    • Refreshed platform support/onboarding matrix entries for the new alias.
  • Bug Fixes
    • Improved agent selector alias resolution and enhanced “unknown agent” guidance with supported alias mappings.
    • Sanitized Deep Agents update environment variables during installs.
  • Tests
    • Added/expanded coverage for Deep Agents alias behavior and alias canonicalization.

@cv cv self-assigned this Jun 26, 2026
@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

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

Use the following commands to manage reviews:

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

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 7d9068c7-d778-4230-86a0-322e33ae6aa3

📥 Commits

Reviewing files that changed from the base of the PR and between 45ed400 and d20251d.

📒 Files selected for processing (3)
  • src/lib/cli/branding.test.ts
  • src/lib/cli/branding.ts
  • test/install-agent-alias-parity.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • test/install-agent-alias-parity.test.ts
  • src/lib/cli/branding.test.ts

📝 Walkthrough

Walkthrough

Adds a nemo-deepagents launcher, alias-aware agent resolution, onboarding/docs updates, and Deep Agents update/install branding.

Changes

Deep Agents launcher, aliasing, and branding

Layer / File(s) Summary
Launcher and branding wiring
bin/nemoclaw.js, package.json, src/lib/cli/branding.ts, src/lib/cli/branding.test.ts, test/cli-oclif-compatibility.test.ts, test/nemo-deepagents-alias.test.ts
Adds the nemo-deepagents executable path, Deep Agents branding, and launcher tests that exercise alias-driven version, help, uninstall, and onboarding output.
Alias resolution and canonical onboarding
src/lib/agent/aliases.ts, src/lib/agent/defs.ts, src/lib/agent/defs.test.ts, src/lib/onboard/legacy-command.ts, src/lib/onboard/legacy-command.test.ts, test/generate-platform-docs.test.ts
Adds shared alias normalization and applies it to onboarding agent selection and manifest lookup resolution.
Onboarding aliases and help text
src/lib/onboard/agent-flag-help.ts, src/lib/onboard/agent-flag-help.test.ts, src/lib/onboard/command-support.test.ts, test/cli/dispatch-basics.test.ts, docs/get-started/quickstart-langchain-deepagents-code.mdx, docs/reference/commands.mdx, docs/reference/commands-nemohermes.mdx, docs/reference/platform-support.mdx, ci/platform-matrix.json
Updates onboarding help text, onboarding docs, and platform notes to show aliases and the nemo-deepagents onboarding entrypoint.
Update branding and installer flow
src/lib/actions/update.ts, src/lib/actions/update.test.ts, scripts/install.sh, test/update.test.ts, test/install-agent-alias-parity.test.ts
Adds Deep Agents update branding, installer canonicalization, and update-command tests.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

Possibly related PRs

  • NVIDIA/NemoClaw#5669: Updates Deep Agents Code branding in src/lib/cli/branding.ts, which this PR extends to the new launcher name and related flows.
  • NVIDIA/NemoClaw#5781: Changes describeAgentFlag() help text formatting, which this PR expands with alias suffixes.

Suggested labels

area: cli, area: onboarding, documentation

Suggested reviewers

  • cjagwani
  • jyaunches

Poem

A bunny hopped through code so bright,
With nemo-deepagents in the light.
Aliases lined up, neat and true,
Installer paths all zapped right through.
🐇✨ The carrots now know what to do.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 14.29% 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 is concise and accurately captures the main change: adding Deep Agents CLI aliases.
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.
✨ 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 feat/deepagents-agent-aliases

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

@github-actions

Copy link
Copy Markdown
Contributor

@github-code-quality

github-code-quality Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in the feat/deepagents-agen... 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 feat/deepagents-agen... d20251d +/-
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 feat/deepagents-agen... 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 feat/deepagents-agen... d20251d +/-
src/lib/state/o...oard-session.ts 91%
src/lib/sandbox/config.ts 76%
src/lib/actions...dbox/rebuild.ts 73%
src/lib/onboard/preflight.ts 62%
src/lib/shields/index.ts 62%
src/lib/actions...licy-channel.ts 60%
src/lib/state/sandbox.ts 56%
src/lib/policy/index.ts 48%
src/lib/onboard...er-gpu-patch.ts 47%
src/lib/onboard.ts 19%

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

@github-actions

github-actions Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor (Nemotron Ultra) — Changes requested

Merge posture: Do not merge yet
Primary next action: Fix PRA-5: Triplicated agent alias registry creates drift risk across CLI, installer, and onboarding; then add or justify PRA-T1.
Open items: 3 required · 9 warnings · 4 suggestions · 8 test follow-ups
Since last review: 4 prior items resolved · 7 still apply · 4 new items found

Action checklist

  • PRA-5 Fix: Triplicated agent alias registry creates drift risk across CLI, installer, and onboarding in scripts/install.sh:40
  • PRA-6 Fix: defs.ts monolith grew (+25 lines) without completing alias logic extraction in src/lib/agent/defs.ts:1
  • PRA-7 Fix: legacy-command.test.ts grew +31 lines for alias tests without shared test extraction in src/lib/onboard/legacy-command.test.ts:351
  • PRA-1 Resolve or justify: Source-of-truth review needed: scripts/install.sh:294-297
  • PRA-2 Resolve or justify: Source-of-truth review needed: src/lib/agent/defs.ts:574-588
  • PRA-3 Resolve or justify: Source-of-truth review needed: src/lib/agent/aliases.ts:53
  • PRA-4 Resolve or justify: Source-of-truth review needed: src/lib/cli/branding.ts:45
  • PRA-8 Resolve or justify: Source-of-truth review needed: fallback sandbox names in resolve_default_sandbox_name() in scripts/install.sh:294
  • PRA-9 Resolve or justify: Source-of-truth review needed: duplicate presentation functions in defs.ts in src/lib/agent/defs.ts:574
  • PRA-10 Resolve or justify: Self-mapping alias entry is redundant and confusing in src/lib/agent/aliases.ts:53
  • PRA-11 Resolve or justify: @ts-nocheck suppresses type checking on CLI entry point in bin/nemoclaw.js:2
  • PRA-12 Resolve or justify: Missing negative tests for alias resolution edge cases in src/lib/agent/defs.test.ts:52
  • 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: Missing negative tests for alias resolution edge cases
  • PRA-T5 Add or justify test follow-up: nemo-deepagents-alias.test.ts scope is appropriate integration test
  • PRA-T6 Add or justify test follow-up: scripts/install.sh:294-297
  • PRA-T7 Add or justify test follow-up: src/lib/agent/defs.ts:574-588
  • PRA-T8 Add or justify test follow-up: src/lib/agent/aliases.ts:53
  • PRA-13 In-scope improvement: nemo-deepagents-alias.test.ts scope is appropriate integration test in test/nemo-deepagents-alias.test.ts:1
  • PRA-14 In-scope improvement: Branding hardcoded instead of derived from agent manifests in src/lib/cli/branding.ts:45
  • PRA-15 In-scope improvement: Shell alias case statement should be generated from TypeScript registry at build time in scripts/install.sh:40
  • PRA-16 In-scope improvement: Extract alias canonicalization tests to shared aliases.test.ts in src/lib/onboard/legacy-command.test.ts:351

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 architecture Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
PRA-3 Resolve/justify architecture Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
PRA-4 Resolve/justify architecture Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
PRA-5 Required security scripts/install.sh:40 Generate the shell case statement from AGENT_ALIASES at build time (e.g., via a small Node script in prepare/build:cli), or add a build-time CI check that fails if parity test would fail. Simpler: move parity test to run in pre-commit/ci as a build gate.
PRA-6 Required architecture src/lib/agent/defs.ts:1 Move unknownAgentMessage, formatAgentAliasSuffix, and agentAliasSummary to aliases.ts; have defs.ts import them. Remove local implementations from defs.ts. Verify wc -l src/lib/agent/defs.ts decreases by ~60 lines.
PRA-7 Required architecture src/lib/onboard/legacy-command.test.ts:351 Create src/lib/agent/aliases.test.ts with shared alias resolution tests (positive/negative). Move alias-related tests from legacy-command.test.ts and defs.test.ts there. Update both files to import shared test helpers.
PRA-8 Resolve/justify architecture scripts/install.sh:294 Identify: what invalid state is handled (no sandbox name), where created (onboard session/registry), why source can't be fixed in this PR, what regression test proves source can't regress, when workaround can be removed. Prefer fixing at source (e.g., agent manifest provides default_sandbox_name field).
PRA-9 Resolve/justify architecture src/lib/agent/defs.ts:574 Move unknownAgentMessage and formatAgentAliasSuffix to aliases.ts (alongside agentAliasSummary). Have defs.ts import all three. This completes the extraction started in this PR.
PRA-10 Resolve/justify scope src/lib/agent/aliases.ts:53 Delete line 53 from AGENT_ALIASES. The exact-match check handles canonical names natively.
PRA-11 Resolve/justify security bin/nemoclaw.js:2 Remove @ts-nocheck and fix any type errors, or add a comment justifying why the entry point cannot be type-checked (e.g., dynamic require of dist/). Consider converting to TypeScript and compiling with the rest of the CLI.
PRA-12 Resolve/justify tests src/lib/agent/defs.test.ts:52 Add tests in defs.test.ts (and aliases.test.ts when created) for: resolveAgentNameAlias('', available) === null; resolveAgentNameAlias(' ', available) === null; resolveAgentNameAlias('NEMOHERMES', available) === 'hermes'; unknownAgentMessage('bogus', null, available) contains alias suggestions; defensive non-string handling.
PRA-13 Improvement tests test/nemo-deepagents-alias.test.ts:1 Keep as-is. This is a valid integration test for the launcher binary behavior.
PRA-14 Improvement correctness src/lib/cli/branding.ts:45 Load display_name from agent manifest at startup (via loadAgent) and use for CLI_DISPLAY_NAME/AGENT_PRODUCT_NAME. Keep uninstallGoodbye as override since it's CLI-specific copy. Document that manifest display_name is the source of truth.
PRA-15 Improvement architecture scripts/install.sh:40 Add a build step (e.g., in prepare or build:cli) that reads src/lib/agent/aliases.ts AGENT_ALIASES, filters by target canonical name, and generates a shell case statement fragment. Source it in install.sh instead of hardcoded patterns. Or add a CI build gate that runs parity validation.
PRA-16 Improvement architecture src/lib/onboard/legacy-command.test.ts:351 Create src/lib/agent/aliases.test.ts with shared test cases. Move canonicalization tests there. Import in both defs.test.ts and legacy-command.test.ts.

🚨 Required before merge

Address these before merging unless a maintainer explicitly overrides the advisor with rationale.

PRA-5 Required — Triplicated agent alias registry creates drift risk across CLI, installer, and onboarding

  • Location: scripts/install.sh:40
  • Category: security
  • Problem: Three separate alias registries exist: TypeScript AGENT_ALIASES (aliases.ts:1-53), shell canonical_agent_name() case statement (install.sh:40-80), and docs. Any new alias must be added in 2+ places. Parity test validates at test time only, not build time. Drift could cause inconsistent agent selection between nemoclaw CLI, nemohermes CLI, nemo-deepagents CLI, and installer, leading to wrong agent provisioned with different sandbox config, network policy, or credential handling.
  • Impact: User runs 'nemo-deepagents onboard' but installer canonicalizes to different agent, or onboarding accepts alias that installer rejects, causing confusing failures or wrong sandbox provisioned with different security posture.
  • Required action: Generate the shell case statement from AGENT_ALIASES at build time (e.g., via a small Node script in prepare/build:cli), or add a build-time CI check that fails if parity test would fail. Simpler: move parity test to run in pre-commit/ci as a build gate.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: grep -r 'nemohermes\|nemo-deepagents\|dcode\|deepagents\|langchain' src/lib/agent/defs.ts src/lib/onboard/legacy-command.ts scripts/install.sh | grep -v test | grep -v '.mdx' — should show only imports/usage of shared registry after fix
  • Missing regression test: Add build-time parity check: node script that loads AGENT_ALIASES, extracts keys for 'langchain-deepagents-code' and 'hermes', and compares against shell case statement patterns; fail CI on mismatch
  • Done when: The required change is committed and verification passes: grep -r 'nemohermes\|nemo-deepagents\|dcode\|deepagents\|langchain' src/lib/agent/defs.ts src/lib/onboard/legacy-command.ts scripts/install.sh | grep -v test | grep -v '.mdx' — should show only imports/usage of shared registry after fix.
  • Evidence: install.sh:40-80 defines canonical_agent_name() with 47 hardcoded patterns; aliases.ts:1-53 defines AGENT_ALIASES with 37 entries; install-agent-alias-parity.test.ts validates at runtime only

PRA-6 Required — defs.ts monolith grew (+25 lines) without completing alias logic extraction

  • Location: src/lib/agent/defs.ts:1
  • Category: architecture
  • Problem: PR extracts alias resolution to new aliases.ts (81 lines) but defs.ts retains re-exports and local copies of unknownAgentMessage, formatAgentAliasSuffix, and resolveAgentNameAlias (lines 574-588). Net line count increased from 657 to 682. Extraction incomplete — aliases.ts should own all alias logic including presentation helpers.
  • Impact: Defs.ts remains a growing hotspot; duplicate logic increases maintenance burden and drift risk between aliases.ts and defs.ts copies. Monolith growth flagged as blocker in driftEvidence.
  • Required action: Move unknownAgentMessage, formatAgentAliasSuffix, and agentAliasSummary to aliases.ts; have defs.ts import them. Remove local implementations from defs.ts. Verify wc -l src/lib/agent/defs.ts decreases by ~60 lines.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: wc -l src/lib/agent/defs.ts — should decrease by ~60 lines after full extraction; grep -n 'unknownAgentMessage\|formatAgentAliasSuffix\|agentAliasSummary' src/lib/agent/defs.ts should show only imports
  • Missing regression test: Existing alias resolution tests in defs.test.ts cover behavior; no new test needed if extraction is pure refactor
  • Done when: The required change is committed and verification passes: wc -l src/lib/agent/defs.ts — should decrease by ~60 lines after full extraction; grep -n 'unknownAgentMessage\|formatAgentAliasSuffix\|agentAliasSummary' src/lib/agent/defs.ts should show only imports.
  • Evidence: defs.ts:574-588 defines unknownAgentMessage, formatAgentAliasSuffix locally while also re-exporting from aliases.ts; monolith delta +25 lines flagged in driftEvidence

PRA-7 Required — legacy-command.test.ts grew +31 lines for alias tests without shared test extraction

  • Location: src/lib/onboard/legacy-command.test.ts:351
  • Category: architecture
  • Problem: Alias canonicalization tests added to legacy-command.test.ts (lines 351-380) duplicate coverage that belongs in a shared aliases.test.ts. File grew from 718 to 749 lines. Previous advisor (PRA-5, PRA-13) recommended extracting to src/lib/agent/aliases.test.ts.
  • Impact: Test maintenance burden split across files; alias logic changes require updates in multiple test files. Growth trend toward 800+ lines.
  • Required action: Create src/lib/agent/aliases.test.ts with shared alias resolution tests (positive/negative). Move alias-related tests from legacy-command.test.ts and defs.test.ts there. Update both files to import shared test helpers.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: ls src/lib/agent/aliases.test.ts exists; grep -c 'resolveAgentNameAlias\|canonicalizes' src/lib/onboard/legacy-command.test.ts should decrease
  • Missing regression test: Shared aliases.test.ts with positive/negative alias resolution test cases imported by both defs.test.ts and legacy-command.test.ts
  • Done when: The required change is committed and verification passes: ls src/lib/agent/aliases.test.ts exists; grep -c 'resolveAgentNameAlias\|canonicalizes' src/lib/onboard/legacy-command.test.ts should decrease.
  • Evidence: legacy-command.test.ts:351-380 tests canonicalizes known --agent aliases; file grew +31 lines; no aliases.test.ts exists
Review findings by urgency: 3 required fixes, 9 items to resolve/justify, 4 in-scope improvements

⚠️ Resolve or justify before merge

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

PRA-1 Resolve/justify — Source-of-truth review needed: scripts/install.sh:294-297

  • 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: Test that fallback sandbox names match agent manifest defaults when session empty
  • 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: install.sh:294-297 case statement on NEMOCLAW_AGENT for fallback; manifests lack default_sandbox_name

PRA-2 Resolve/justify — Source-of-truth review needed: src/lib/agent/defs.ts:574-588

  • 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: Existing tests cover error message formatting; no new test needed
  • 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: defs.ts:574-588 defines unknownAgentMessage, formatAgentAliasSuffix locally while re-exporting agentAliasSummary from aliases.ts

PRA-3 Resolve/justify — Source-of-truth review needed: src/lib/agent/aliases.ts:53

  • Location: not file-specific
  • Category: architecture
  • Problem: The advisor marked localized patch analysis as missing.
  • 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: Existing alias resolution tests cover canonical name pass-through
  • 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: aliases.ts:53 has 'langchain-deepagents-code': 'langchain-deepagents-code'; resolveAgentNameAlias line 19 checks availableAgents.includes(trimmed) first

PRA-4 Resolve/justify — Source-of-truth review needed: src/lib/cli/branding.ts:45

  • 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: Test that branding matches manifest display_name for all agents
  • 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: branding.ts:45 AGENT_PRODUCT_BRANDING hardcodes display/product; manifests have display_name

PRA-8 Resolve/justify — Source-of-truth review needed: fallback sandbox names in resolve_default_sandbox_name()

  • Location: scripts/install.sh:294
  • Category: architecture
  • Problem: resolve_default_sandbox_name() uses case statement on NEMOCLAW_AGENT for fallback sandbox names (hermes→hermes, langchain-deepagents-code→deepagents-code). This is a localized workaround for missing agent metadata. The invalid state (no sandbox name in session/registry) is handled here instead of at source.
  • Impact: Fallback logic diverges from agent manifest defaults if they exist; no regression test proves source can't regress; removal condition undefined.
  • Recommended action: Identify: what invalid state is handled (no sandbox name), where created (onboard session/registry), why source can't be fixed in this PR, what regression test proves source can't regress, when workaround can be removed. Prefer fixing at source (e.g., agent manifest provides default_sandbox_name field).
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Check if agent manifests have a default_sandbox_name field; if not, this workaround is justified but needs removal condition documented
  • Missing regression test: Test that fallback sandbox names match agent manifest defaults when session/registry empty
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Check if agent manifests have a default_sandbox_name field; if not, this workaround is justified but needs removal condition documented.
  • Evidence: install.sh:294-297 case statement on NEMOCLAW_AGENT for fallback; manifests lack default_sandbox_name field

PRA-9 Resolve/justify — Source-of-truth review needed: duplicate presentation functions in defs.ts

  • Location: src/lib/agent/defs.ts:574
  • Category: architecture
  • Problem: defs.ts defines unknownAgentMessage and formatAgentAliasSuffix locally while also re-exporting agentAliasSummary from aliases.ts. Duplicate presentation logic increases maintenance burden and drift risk.
  • Impact: Error message formatting and alias suffix formatting can diverge between aliases.ts and defs.ts copies.
  • Recommended action: Move unknownAgentMessage and formatAgentAliasSuffix to aliases.ts (alongside agentAliasSummary). Have defs.ts import all three. This completes the extraction started in this PR.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: grep -n 'unknownAgentMessage\|formatAgentAliasSuffix' src/lib/agent/defs.ts should show only import statements after fix
  • Missing regression test: Existing tests cover error message formatting; no new test needed
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: grep -n 'unknownAgentMessage\|formatAgentAliasSuffix' src/lib/agent/defs.ts should show only import statements after fix.
  • Evidence: defs.ts:574-588 defines unknownAgentMessage, formatAgentAliasSuffix locally while re-exporting agentAliasSummary from aliases.ts

PRA-10 Resolve/justify — Self-mapping alias entry is redundant and confusing

  • Location: src/lib/agent/aliases.ts:53
  • Category: scope
  • Problem: AGENT_ALIASES includes self-mapping entry 'langchain-deepagents-code': 'langchain-deepagents-code'. The exact-match check in resolveAgentNameAlias (line 19) handles canonical names natively before alias lookup. This entry is redundant and confusing.
  • Impact: Registry contains misleading entry; maintainers may think canonical names need explicit self-mapping.
  • Recommended action: Delete line 53 from AGENT_ALIASES. The exact-match check handles canonical names natively.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: grep 'langchain-deepagents-code.*langchain-deepagents-code' src/lib/agent/aliases.ts should return nothing after fix
  • Missing regression test: Existing alias resolution tests cover canonical name pass-through; no new test needed
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: grep 'langchain-deepagents-code.*langchain-deepagents-code' src/lib/agent/aliases.ts should return nothing after fix.
  • Evidence: aliases.ts:53 has 'langchain-deepagents-code': 'langchain-deepagents-code'; resolveAgentNameAlias line 19 checks availableAgents.includes(trimmed) first

PRA-11 Resolve/justify — @ts-nocheck suppresses type checking on CLI entry point

  • Location: bin/nemoclaw.js:2
  • Category: security
  • Problem: @ts-nocheck suppresses type checking on CLI entry point. The file now has logic (invokedAs detection, env var setting) that would benefit from type checking. No justification comment present.
  • Impact: Type errors in the entry point could cause runtime misbehavior (e.g., wrong agent env vars set, wrong CLI branding). Entry point is the trust boundary for all CLI invocations.
  • Recommended action: Remove @ts-nocheck and fix any type errors, or add a comment justifying why the entry point cannot be type-checked (e.g., dynamic require of dist/). Consider converting to TypeScript and compiling with the rest of the CLI.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: head -5 bin/nemoclaw.js should not contain @ts-nocheck after fix
  • Missing regression test: TypeScript compilation of bin/nemoclaw.js passes (if converted) or tsc --checkJs passes
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: head -5 bin/nemoclaw.js should not contain @ts-nocheck after fix.
  • Evidence: bin/nemoclaw.js:2 has // @ts-nocheck; lines 4-9 set NEMOCLAW_AGENT and NEMOCLAW_INVOKED_AS based on invokedAs

PRA-12 Resolve/justify — Missing negative tests for alias resolution edge cases

  • Location: src/lib/agent/defs.test.ts:52
  • Category: tests
  • Problem: Positive alias resolution tests exist but missing negative edge cases: empty string, whitespace-only, case insensitivity for non-aliases, non-string input handling, unknown alias returns null.
  • Impact: Edge cases in resolveAgentNameAlias() untested; could return unexpected values or throw instead of returning null.
  • Recommended action: Add tests in defs.test.ts (and aliases.test.ts when created) for: resolveAgentNameAlias('', available) === null; resolveAgentNameAlias(' ', available) === null; resolveAgentNameAlias('NEMOHERMES', available) === 'hermes'; unknownAgentMessage('bogus', null, available) contains alias suggestions; defensive non-string handling.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: grep -A5 'empty string\|whitespace\|non-string' src/lib/agent/defs.test.ts should find negative test cases after fix
  • Missing regression test: Negative test cases for resolveAgentNameAlias edge cases
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: grep -A5 'empty string\|whitespace\|non-string' src/lib/agent/defs.test.ts should find negative test cases after fix.
  • Evidence: defs.test.ts:52-65 only tests positive alias resolution; no tests for empty, whitespace, non-string, or unknown inputs

💡 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-13 Improvement — nemo-deepagents-alias.test.ts scope is appropriate integration test

  • Location: test/nemo-deepagents-alias.test.ts:1
  • Category: tests
  • Problem: nemo-deepagents-alias.test.ts (141 lines) tests the symlink binary integration: version output, help output, uninstall routing, env var setting, CLI name preservation. This is appropriate integration testing — it verifies the launcher binary behavior, not unit logic. No action needed.
  • Impact: Test correctly validates integration boundary (launcher symlink → binary → env vars → branding) without duplicating unit logic tests.
  • Suggested action: Keep as-is. This is a valid integration test for the launcher binary behavior.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Test file only verifies: (1) spawned binary sets NEMOCLAW_AGENT/NEMOCLAW_INVOKED_AS correctly, (2) symlink 'nemo-deepagents' resolves to bin/nemoclaw.js, (3) CLI help/version output shows NemoDeepAgents branding
  • Missing regression test: None — integration test scope is appropriate
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: Test spawns actual binary via symlink, verifies env var injection, version output, help text, uninstall command routing, and nemoclaw CLI name preservation

PRA-14 Improvement — Branding hardcoded instead of derived from agent manifests

  • Location: src/lib/cli/branding.ts:45
  • Category: correctness
  • Problem: AGENT_PRODUCT_BRANDING hardcodes display/product names instead of loading from agent manifests. Manifests already have display_name field. This creates drift risk when manifest names change.
  • Impact: Branding can diverge from manifest display_name; updating manifest doesn't automatically update CLI branding.
  • Suggested action: Load display_name from agent manifest at startup (via loadAgent) and use for CLI_DISPLAY_NAME/AGENT_PRODUCT_NAME. Keep uninstallGoodbye as override since it's CLI-specific copy. Document that manifest display_name is the source of truth.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: grep -n 'displayName\|product' src/lib/cli/branding.ts should show manifest-driven loading after fix
  • Missing regression test: Test that branding matches manifest display_name for all agents
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: branding.ts:45 AGENT_PRODUCT_BRANDING object hardcodes display/product; agents/*/manifest.yaml have display_name fields

PRA-15 Improvement — Shell alias case statement should be generated from TypeScript registry at build time

  • Location: scripts/install.sh:40
  • Category: architecture
  • Problem: Shell canonical_agent_name() case statement duplicates AGENT_ALIASES logic. Should be generated from TypeScript registry at build time to prevent drift.
  • Impact: Manual sync required; drift risk same as PRA-3. Build-time generation eliminates this class of bug.
  • Suggested action: Add a build step (e.g., in prepare or build:cli) that reads src/lib/agent/aliases.ts AGENT_ALIASES, filters by target canonical name, and generates a shell case statement fragment. Source it in install.sh instead of hardcoded patterns. Or add a CI build gate that runs parity validation.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: scripts/install.sh should source a generated fragment file; build:cli should generate it from aliases.ts
  • Missing regression test: Build-time generation script with test that verifies generated fragment matches AGENT_ALIASES
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: install.sh:40-80 canonical_agent_name() has 47 hardcoded patterns; aliases.ts:1-53 has 37 entries

PRA-16 Improvement — Extract alias canonicalization tests to shared aliases.test.ts

  • Location: src/lib/onboard/legacy-command.test.ts:351
  • Category: architecture
  • Problem: Alias canonicalization tests in legacy-command.test.ts duplicate coverage that belongs in shared aliases.test.ts. File grew +31 lines. Previous advisor recommended extracting to src/lib/agent/aliases.test.ts.
  • Impact: Test maintenance burden split across files; alias logic changes require updates in multiple test files.
  • Suggested action: Create src/lib/agent/aliases.test.ts with shared test cases. Move canonicalization tests there. Import in both defs.test.ts and legacy-command.test.ts.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: ls src/lib/agent/aliases.test.ts exists; legacy-command.test.ts imports from it
  • Missing regression test: Shared aliases.test.ts imported by both test files
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: legacy-command.test.ts:351-380 tests canonicalizes known --agent aliases; no aliases.test.ts exists
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 — npm pack dry-run verifies nemo-deepagents bin entry. Runtime/sandbox/infrastructure paths need behavioral runtime validation: bin/nemoclaw.js (launcher entry point), scripts/install.sh (shell alias resolution), package.json (npm bin registration), docs (user-facing alias references). Integration test for launcher exists. Unit tests for resolution logic exist. Build-time parity gate missing.
  • PRA-T2 Runtime validation — install.sh canonical_agent_name() generated fragment matches AGENT_ALIASES at build time. Runtime/sandbox/infrastructure paths need behavioral runtime validation: bin/nemoclaw.js (launcher entry point), scripts/install.sh (shell alias resolution), package.json (npm bin registration), docs (user-facing alias references). Integration test for launcher exists. Unit tests for resolution logic exist. Build-time parity gate missing.
  • PRA-T3 Runtime validation — oclif metadata includes nemo-deepagents command aliases. Runtime/sandbox/infrastructure paths need behavioral runtime validation: bin/nemoclaw.js (launcher entry point), scripts/install.sh (shell alias resolution), package.json (npm bin registration), docs (user-facing alias references). Integration test for launcher exists. Unit tests for resolution logic exist. Build-time parity gate missing.
  • PRA-T4 Missing negative tests for alias resolution edge cases — Add tests in defs.test.ts (and aliases.test.ts when created) for: resolveAgentNameAlias('', available) === null; resolveAgentNameAlias(' ', available) === null; resolveAgentNameAlias('NEMOHERMES', available) === 'hermes'; unknownAgentMessage('bogus', null, available) contains alias suggestions; defensive non-string handling.
  • PRA-T5 nemo-deepagents-alias.test.ts scope is appropriate integration test — Keep as-is. This is a valid integration test for the launcher binary behavior.
  • PRA-T6 scripts/install.sh:294-297 — Test that fallback sandbox names match agent manifest defaults when session empty. install.sh:294-297 case statement on NEMOCLAW_AGENT for fallback; manifests lack default_sandbox_name
  • PRA-T7 src/lib/agent/defs.ts:574-588 — Existing tests cover error message formatting; no new test needed. defs.ts:574-588 defines unknownAgentMessage, formatAgentAliasSuffix locally while re-exporting agentAliasSummary from aliases.ts
  • PRA-T8 src/lib/agent/aliases.ts:53 — Existing alias resolution tests cover canonical name pass-through. aliases.ts:53 has 'langchain-deepagents-code': 'langchain-deepagents-code'; resolveAgentNameAlias line 19 checks availableAgents.includes(trimmed) first
Since last review details

Current findings, using the urgency labels above:

PRA-1 Resolve/justify — Source-of-truth review needed: scripts/install.sh:294-297

  • 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: Test that fallback sandbox names match agent manifest defaults when session empty
  • 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: install.sh:294-297 case statement on NEMOCLAW_AGENT for fallback; manifests lack default_sandbox_name

PRA-2 Resolve/justify — Source-of-truth review needed: src/lib/agent/defs.ts:574-588

  • 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: Existing tests cover error message formatting; no new test needed
  • 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: defs.ts:574-588 defines unknownAgentMessage, formatAgentAliasSuffix locally while re-exporting agentAliasSummary from aliases.ts

PRA-3 Resolve/justify — Source-of-truth review needed: src/lib/agent/aliases.ts:53

  • Location: not file-specific
  • Category: architecture
  • Problem: The advisor marked localized patch analysis as missing.
  • 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: Existing alias resolution tests cover canonical name pass-through
  • 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: aliases.ts:53 has 'langchain-deepagents-code': 'langchain-deepagents-code'; resolveAgentNameAlias line 19 checks availableAgents.includes(trimmed) first

PRA-4 Resolve/justify — Source-of-truth review needed: src/lib/cli/branding.ts:45

  • 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: Test that branding matches manifest display_name for all agents
  • 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: branding.ts:45 AGENT_PRODUCT_BRANDING hardcodes display/product; manifests have display_name

PRA-5 Required — Triplicated agent alias registry creates drift risk across CLI, installer, and onboarding

  • Location: scripts/install.sh:40
  • Category: security
  • Problem: Three separate alias registries exist: TypeScript AGENT_ALIASES (aliases.ts:1-53), shell canonical_agent_name() case statement (install.sh:40-80), and docs. Any new alias must be added in 2+ places. Parity test validates at test time only, not build time. Drift could cause inconsistent agent selection between nemoclaw CLI, nemohermes CLI, nemo-deepagents CLI, and installer, leading to wrong agent provisioned with different sandbox config, network policy, or credential handling.
  • Impact: User runs 'nemo-deepagents onboard' but installer canonicalizes to different agent, or onboarding accepts alias that installer rejects, causing confusing failures or wrong sandbox provisioned with different security posture.
  • Required action: Generate the shell case statement from AGENT_ALIASES at build time (e.g., via a small Node script in prepare/build:cli), or add a build-time CI check that fails if parity test would fail. Simpler: move parity test to run in pre-commit/ci as a build gate.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: grep -r 'nemohermes\|nemo-deepagents\|dcode\|deepagents\|langchain' src/lib/agent/defs.ts src/lib/onboard/legacy-command.ts scripts/install.sh | grep -v test | grep -v '.mdx' — should show only imports/usage of shared registry after fix
  • Missing regression test: Add build-time parity check: node script that loads AGENT_ALIASES, extracts keys for 'langchain-deepagents-code' and 'hermes', and compares against shell case statement patterns; fail CI on mismatch
  • Done when: The required change is committed and verification passes: grep -r 'nemohermes\|nemo-deepagents\|dcode\|deepagents\|langchain' src/lib/agent/defs.ts src/lib/onboard/legacy-command.ts scripts/install.sh | grep -v test | grep -v '.mdx' — should show only imports/usage of shared registry after fix.
  • Evidence: install.sh:40-80 defines canonical_agent_name() with 47 hardcoded patterns; aliases.ts:1-53 defines AGENT_ALIASES with 37 entries; install-agent-alias-parity.test.ts validates at runtime only

PRA-6 Required — defs.ts monolith grew (+25 lines) without completing alias logic extraction

  • Location: src/lib/agent/defs.ts:1
  • Category: architecture
  • Problem: PR extracts alias resolution to new aliases.ts (81 lines) but defs.ts retains re-exports and local copies of unknownAgentMessage, formatAgentAliasSuffix, and resolveAgentNameAlias (lines 574-588). Net line count increased from 657 to 682. Extraction incomplete — aliases.ts should own all alias logic including presentation helpers.
  • Impact: Defs.ts remains a growing hotspot; duplicate logic increases maintenance burden and drift risk between aliases.ts and defs.ts copies. Monolith growth flagged as blocker in driftEvidence.
  • Required action: Move unknownAgentMessage, formatAgentAliasSuffix, and agentAliasSummary to aliases.ts; have defs.ts import them. Remove local implementations from defs.ts. Verify wc -l src/lib/agent/defs.ts decreases by ~60 lines.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: wc -l src/lib/agent/defs.ts — should decrease by ~60 lines after full extraction; grep -n 'unknownAgentMessage\|formatAgentAliasSuffix\|agentAliasSummary' src/lib/agent/defs.ts should show only imports
  • Missing regression test: Existing alias resolution tests in defs.test.ts cover behavior; no new test needed if extraction is pure refactor
  • Done when: The required change is committed and verification passes: wc -l src/lib/agent/defs.ts — should decrease by ~60 lines after full extraction; grep -n 'unknownAgentMessage\|formatAgentAliasSuffix\|agentAliasSummary' src/lib/agent/defs.ts should show only imports.
  • Evidence: defs.ts:574-588 defines unknownAgentMessage, formatAgentAliasSuffix locally while also re-exporting from aliases.ts; monolith delta +25 lines flagged in driftEvidence

PRA-7 Required — legacy-command.test.ts grew +31 lines for alias tests without shared test extraction

  • Location: src/lib/onboard/legacy-command.test.ts:351
  • Category: architecture
  • Problem: Alias canonicalization tests added to legacy-command.test.ts (lines 351-380) duplicate coverage that belongs in a shared aliases.test.ts. File grew from 718 to 749 lines. Previous advisor (PRA-5, PRA-13) recommended extracting to src/lib/agent/aliases.test.ts.
  • Impact: Test maintenance burden split across files; alias logic changes require updates in multiple test files. Growth trend toward 800+ lines.
  • Required action: Create src/lib/agent/aliases.test.ts with shared alias resolution tests (positive/negative). Move alias-related tests from legacy-command.test.ts and defs.test.ts there. Update both files to import shared test helpers.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: ls src/lib/agent/aliases.test.ts exists; grep -c 'resolveAgentNameAlias\|canonicalizes' src/lib/onboard/legacy-command.test.ts should decrease
  • Missing regression test: Shared aliases.test.ts with positive/negative alias resolution test cases imported by both defs.test.ts and legacy-command.test.ts
  • Done when: The required change is committed and verification passes: ls src/lib/agent/aliases.test.ts exists; grep -c 'resolveAgentNameAlias\|canonicalizes' src/lib/onboard/legacy-command.test.ts should decrease.
  • Evidence: legacy-command.test.ts:351-380 tests canonicalizes known --agent aliases; file grew +31 lines; no aliases.test.ts exists

PRA-8 Resolve/justify — Source-of-truth review needed: fallback sandbox names in resolve_default_sandbox_name()

  • Location: scripts/install.sh:294
  • Category: architecture
  • Problem: resolve_default_sandbox_name() uses case statement on NEMOCLAW_AGENT for fallback sandbox names (hermes→hermes, langchain-deepagents-code→deepagents-code). This is a localized workaround for missing agent metadata. The invalid state (no sandbox name in session/registry) is handled here instead of at source.
  • Impact: Fallback logic diverges from agent manifest defaults if they exist; no regression test proves source can't regress; removal condition undefined.
  • Recommended action: Identify: what invalid state is handled (no sandbox name), where created (onboard session/registry), why source can't be fixed in this PR, what regression test proves source can't regress, when workaround can be removed. Prefer fixing at source (e.g., agent manifest provides default_sandbox_name field).
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Check if agent manifests have a default_sandbox_name field; if not, this workaround is justified but needs removal condition documented
  • Missing regression test: Test that fallback sandbox names match agent manifest defaults when session/registry empty
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Check if agent manifests have a default_sandbox_name field; if not, this workaround is justified but needs removal condition documented.
  • Evidence: install.sh:294-297 case statement on NEMOCLAW_AGENT for fallback; manifests lack default_sandbox_name field

PRA-9 Resolve/justify — Source-of-truth review needed: duplicate presentation functions in defs.ts

  • Location: src/lib/agent/defs.ts:574
  • Category: architecture
  • Problem: defs.ts defines unknownAgentMessage and formatAgentAliasSuffix locally while also re-exporting agentAliasSummary from aliases.ts. Duplicate presentation logic increases maintenance burden and drift risk.
  • Impact: Error message formatting and alias suffix formatting can diverge between aliases.ts and defs.ts copies.
  • Recommended action: Move unknownAgentMessage and formatAgentAliasSuffix to aliases.ts (alongside agentAliasSummary). Have defs.ts import all three. This completes the extraction started in this PR.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: grep -n 'unknownAgentMessage\|formatAgentAliasSuffix' src/lib/agent/defs.ts should show only import statements after fix
  • Missing regression test: Existing tests cover error message formatting; no new test needed
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: grep -n 'unknownAgentMessage\|formatAgentAliasSuffix' src/lib/agent/defs.ts should show only import statements after fix.
  • Evidence: defs.ts:574-588 defines unknownAgentMessage, formatAgentAliasSuffix locally while re-exporting agentAliasSummary from aliases.ts

PRA-10 Resolve/justify — Self-mapping alias entry is redundant and confusing

  • Location: src/lib/agent/aliases.ts:53
  • Category: scope
  • Problem: AGENT_ALIASES includes self-mapping entry 'langchain-deepagents-code': 'langchain-deepagents-code'. The exact-match check in resolveAgentNameAlias (line 19) handles canonical names natively before alias lookup. This entry is redundant and confusing.
  • Impact: Registry contains misleading entry; maintainers may think canonical names need explicit self-mapping.
  • Recommended action: Delete line 53 from AGENT_ALIASES. The exact-match check handles canonical names natively.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: grep 'langchain-deepagents-code.*langchain-deepagents-code' src/lib/agent/aliases.ts should return nothing after fix
  • Missing regression test: Existing alias resolution tests cover canonical name pass-through; no new test needed
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: grep 'langchain-deepagents-code.*langchain-deepagents-code' src/lib/agent/aliases.ts should return nothing after fix.
  • Evidence: aliases.ts:53 has 'langchain-deepagents-code': 'langchain-deepagents-code'; resolveAgentNameAlias line 19 checks availableAgents.includes(trimmed) first

PRA-11 Resolve/justify — @ts-nocheck suppresses type checking on CLI entry point

  • Location: bin/nemoclaw.js:2
  • Category: security
  • Problem: @ts-nocheck suppresses type checking on CLI entry point. The file now has logic (invokedAs detection, env var setting) that would benefit from type checking. No justification comment present.
  • Impact: Type errors in the entry point could cause runtime misbehavior (e.g., wrong agent env vars set, wrong CLI branding). Entry point is the trust boundary for all CLI invocations.
  • Recommended action: Remove @ts-nocheck and fix any type errors, or add a comment justifying why the entry point cannot be type-checked (e.g., dynamic require of dist/). Consider converting to TypeScript and compiling with the rest of the CLI.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: head -5 bin/nemoclaw.js should not contain @ts-nocheck after fix
  • Missing regression test: TypeScript compilation of bin/nemoclaw.js passes (if converted) or tsc --checkJs passes
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: head -5 bin/nemoclaw.js should not contain @ts-nocheck after fix.
  • Evidence: bin/nemoclaw.js:2 has // @ts-nocheck; lines 4-9 set NEMOCLAW_AGENT and NEMOCLAW_INVOKED_AS based on invokedAs

PRA-12 Resolve/justify — Missing negative tests for alias resolution edge cases

  • Location: src/lib/agent/defs.test.ts:52
  • Category: tests
  • Problem: Positive alias resolution tests exist but missing negative edge cases: empty string, whitespace-only, case insensitivity for non-aliases, non-string input handling, unknown alias returns null.
  • Impact: Edge cases in resolveAgentNameAlias() untested; could return unexpected values or throw instead of returning null.
  • Recommended action: Add tests in defs.test.ts (and aliases.test.ts when created) for: resolveAgentNameAlias('', available) === null; resolveAgentNameAlias(' ', available) === null; resolveAgentNameAlias('NEMOHERMES', available) === 'hermes'; unknownAgentMessage('bogus', null, available) contains alias suggestions; defensive non-string handling.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: grep -A5 'empty string\|whitespace\|non-string' src/lib/agent/defs.test.ts should find negative test cases after fix
  • Missing regression test: Negative test cases for resolveAgentNameAlias edge cases
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: grep -A5 'empty string\|whitespace\|non-string' src/lib/agent/defs.test.ts should find negative test cases after fix.
  • Evidence: defs.test.ts:52-65 only tests positive alias resolution; no tests for empty, whitespace, non-string, or unknown inputs

PRA-13 Improvement — nemo-deepagents-alias.test.ts scope is appropriate integration test

  • Location: test/nemo-deepagents-alias.test.ts:1
  • Category: tests
  • Problem: nemo-deepagents-alias.test.ts (141 lines) tests the symlink binary integration: version output, help output, uninstall routing, env var setting, CLI name preservation. This is appropriate integration testing — it verifies the launcher binary behavior, not unit logic. No action needed.
  • Impact: Test correctly validates integration boundary (launcher symlink → binary → env vars → branding) without duplicating unit logic tests.
  • Suggested action: Keep as-is. This is a valid integration test for the launcher binary behavior.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Test file only verifies: (1) spawned binary sets NEMOCLAW_AGENT/NEMOCLAW_INVOKED_AS correctly, (2) symlink 'nemo-deepagents' resolves to bin/nemoclaw.js, (3) CLI help/version output shows NemoDeepAgents branding
  • Missing regression test: None — integration test scope is appropriate
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: Test spawns actual binary via symlink, verifies env var injection, version output, help text, uninstall command routing, and nemoclaw CLI name preservation

PRA-14 Improvement — Branding hardcoded instead of derived from agent manifests

  • Location: src/lib/cli/branding.ts:45
  • Category: correctness
  • Problem: AGENT_PRODUCT_BRANDING hardcodes display/product names instead of loading from agent manifests. Manifests already have display_name field. This creates drift risk when manifest names change.
  • Impact: Branding can diverge from manifest display_name; updating manifest doesn't automatically update CLI branding.
  • Suggested action: Load display_name from agent manifest at startup (via loadAgent) and use for CLI_DISPLAY_NAME/AGENT_PRODUCT_NAME. Keep uninstallGoodbye as override since it's CLI-specific copy. Document that manifest display_name is the source of truth.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: grep -n 'displayName\|product' src/lib/cli/branding.ts should show manifest-driven loading after fix
  • Missing regression test: Test that branding matches manifest display_name for all agents
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: branding.ts:45 AGENT_PRODUCT_BRANDING object hardcodes display/product; agents/*/manifest.yaml have display_name fields

PRA-15 Improvement — Shell alias case statement should be generated from TypeScript registry at build time

  • Location: scripts/install.sh:40
  • Category: architecture
  • Problem: Shell canonical_agent_name() case statement duplicates AGENT_ALIASES logic. Should be generated from TypeScript registry at build time to prevent drift.
  • Impact: Manual sync required; drift risk same as PRA-3. Build-time generation eliminates this class of bug.
  • Suggested action: Add a build step (e.g., in prepare or build:cli) that reads src/lib/agent/aliases.ts AGENT_ALIASES, filters by target canonical name, and generates a shell case statement fragment. Source it in install.sh instead of hardcoded patterns. Or add a CI build gate that runs parity validation.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: scripts/install.sh should source a generated fragment file; build:cli should generate it from aliases.ts
  • Missing regression test: Build-time generation script with test that verifies generated fragment matches AGENT_ALIASES
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: install.sh:40-80 canonical_agent_name() has 47 hardcoded patterns; aliases.ts:1-53 has 37 entries

PRA-16 Improvement — Extract alias canonicalization tests to shared aliases.test.ts

  • Location: src/lib/onboard/legacy-command.test.ts:351
  • Category: architecture
  • Problem: Alias canonicalization tests in legacy-command.test.ts duplicate coverage that belongs in shared aliases.test.ts. File grew +31 lines. Previous advisor recommended extracting to src/lib/agent/aliases.test.ts.
  • Impact: Test maintenance burden split across files; alias logic changes require updates in multiple test files.
  • Suggested action: Create src/lib/agent/aliases.test.ts with shared test cases. Move canonicalization tests there. Import in both defs.test.ts and legacy-command.test.ts.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: ls src/lib/agent/aliases.test.ts exists; legacy-command.test.ts imports from it
  • Missing regression test: Shared aliases.test.ts imported by both test files
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: legacy-command.test.ts:351-380 tests canonicalizes known --agent aliases; no aliases.test.ts exists

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

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: cloud-onboard-vitest, ubuntu-repo-cloud-langchain-deepagents-code, onboard-negative-paths-vitest
Optional E2E: hermes-e2e-vitest, launchable-smoke-vitest

Dispatch hint: scenarios=cloud-onboard,ubuntu-repo-cloud-langchain-deepagents-code,onboard-negative-paths

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • cloud-onboard-vitest (high): Required because scripts/install.sh, package bin metadata, CLI entrypoint dispatch, and installer verification changed. This job exercises the real hosted cloud onboarding path through the installer boundary and verifies a healthy sandbox with security checks.
  • ubuntu-repo-cloud-langchain-deepagents-code (high): Required because the PR changes how users select the LangChain Deep Agents Code runtime via aliases and the new nemo-deepagents entrypoint. This registry scenario validates hosted onboarding, inference, terminal-agent readiness, and Deep Agents Code policy checks for the affected runtime.
  • onboard-negative-paths-vitest (low): Required focused coverage for the onboarding CLI boundary because the PR changes --agent parsing, known-agent validation, alias reporting, and onboarding help text. This catches regressions in invalid or ambiguous agent-selector handling without requiring a full sandbox.

Optional E2E

  • hermes-e2e-vitest (high): Optional confidence check because the new shared alias resolver and installer canonicalization also touch existing alternate-agent behavior for nemohermes/hermes. Run if reviewers want assurance that the established non-OpenClaw installer/onboard path was not regressed.
  • launchable-smoke-vitest (medium): Optional broader packaging/user-journey smoke because the PR changes packaged bin entries and CLI branding. This validates a launchable-built CLI can onboard and route inference, but it does not specifically exercise the new nemo-deepagents alias.

New E2E recommendations

  • nemo-deepagents alias installer/onboard flow (high): Existing Deep Agents Code hosted onboarding uses the canonical agent selection path and does not appear to exercise the installed nemo-deepagents binary, bin/nemoclaw.js invoked-as behavior, npm bin linking, installer _CLI_BIN=nemo-deepagents verification, default deepagents-code sandbox name, or lifecycle commands through the alias.
    • Suggested test: Add a focused live Vitest E2E that installs/links the package, invokes nemo-deepagents onboard (or installer with NEMOCLAW_AGENT=dcode), then verifies status/policy-add/logs or a minimal terminal-agent readiness check through the nemo-deepagents command.
  • alternate-agent update handoff (medium): The update action now canonicalizes Deep Agents aliases and preserves NEMOCLAW_AGENT=langchain-deepagents-code into the sanitized installer environment, but existing live E2E coverage does not validate update-to-installer handoff for nemo-deepagents.
    • Suggested test: Add a hermetic or live E2E-style update scenario that runs the installed nemo-deepagents update --yes path with a stubbed maintained installer and asserts the child environment and post-update guidance use the Deep Agents CLI identity.

Dispatch hint

  • Workflow: .github/workflows/e2e-vitest-scenarios.yaml
  • jobs input: scenarios=cloud-onboard,ubuntu-repo-cloud-langchain-deepagents-code,onboard-negative-paths

@github-actions

github-actions Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Recommendation

Required Vitest E2E scenarios: ubuntu-repo-cloud-langchain-deepagents-code, cloud-onboard-vitest
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-langchain-deepagents-code
  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=cloud-onboard-vitest

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-langchain-deepagents-code: The PR changes Deep Agents agent alias resolution, CLI branding, onboard --agent parsing, and the nemo-deepagents launcher path. This live-supported typed scenario is the targeted registry path for LangChain Deep Agents Code onboarding and validates that the agent still onboards and reaches its terminal-runtime expected state.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-langchain-deepagents-code
  • cloud-onboard-vitest: The PR changes scripts/install.sh plus package bin wiring. The cloud-onboard free-standing Vitest job is the targeted live installer job that exercises the public installer path and catches installer/link/build regressions from these changes.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=cloud-onboard-vitest

Optional Vitest E2E scenarios

  • None.

Relevant changed files

  • bin/nemoclaw.js
  • package-lock.json
  • package.json
  • scripts/install.sh
  • src/lib/actions/update.ts
  • src/lib/agent/aliases.ts
  • src/lib/agent/defs.ts
  • src/lib/cli/branding.ts
  • src/lib/onboard/agent-flag-help.ts
  • src/lib/onboard/command-support.test.ts
  • src/lib/onboard/legacy-command.test.ts
  • src/lib/onboard/legacy-command.ts

@github-actions

github-actions Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings

Merge posture: No blocking advisor findings
Primary next action: Resolve or justify PRA-1: Source-of-truth review needed: TypeScript and shell agent alias maps.
Open items: 0 required · 1 warning · 2 suggestions · 7 test follow-ups
Since last review: 1 prior item resolved · 0 still apply · 2 new items found

Action checklist

  • PRA-1 Resolve or justify: Source-of-truth review needed: TypeScript and shell agent alias maps
  • 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: Expand installer alias parity to every exported TypeScript alias
  • PRA-T5 Add or justify test follow-up: Add package bin metadata parity coverage for `nemo-deepagents`
  • PRA-T6 Add or justify test follow-up: Acceptance clause
  • PRA-T7 Add or justify test follow-up: TypeScript and shell agent alias maps
  • PRA-2 In-scope improvement: Expand installer alias parity to every exported TypeScript alias in test/install-agent-alias-parity.test.ts:16
  • PRA-3 In-scope improvement: Add package bin metadata parity coverage for `nemo-deepagents` in package.json:8

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 Improvement tests test/install-agent-alias-parity.test.ts:16 In this PR, import `AGENT_ALIASES` from the built TypeScript module and iterate all entries through the sourced installer `canonical_agent_name()` helper, keeping a small separate list only for canonical names that are not aliases.
PRA-3 Improvement tests package.json:8 Add a lightweight metadata test that reads `package.json` and `package-lock.json` and asserts the `nemo-deepagents` bin entry exists in both files and points at the existing `bin/nemoclaw.js` launcher.
Review findings by urgency: 0 required fixes, 1 item to resolve/justify, 2 in-scope improvements

⚠️ Resolve or justify before merge

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

PRA-1 Resolve/justify — Source-of-truth review needed: TypeScript and shell agent alias maps

  • 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: Representative parity exists in `test/install-agent-alias-parity.test.ts`, but it does not iterate every exported `AGENT_ALIASES` key.
  • 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: `src/lib/agent/aliases.ts` and `scripts/install.sh:canonical_agent_name()` contain parallel alias lists; the current parity test covers selected cases only.

💡 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-2 Improvement — Expand installer alias parity to every exported TypeScript alias

  • Location: test/install-agent-alias-parity.test.ts:16
  • Category: tests
  • Problem: The PR now has two alias sources of truth: `src/lib/agent/aliases.ts` for TypeScript paths and `scripts/install.sh:canonical_agent_name()` for installer/bootstrap paths. The current parity test covers representative cases, but not every key exported by `AGENT_ALIASES`, so a future alias can be added to one side without the test failing.
  • Impact: A drifted alias would make `nemoclaw onboard --agent <alias>` work differently from `curl|bash NEMOCLAW_AGENT=<alias>`, causing the installer to brand or provision a different runtime than the TypeScript CLI accepts.
  • Suggested action: In this PR, import `AGENT_ALIASES` from the built TypeScript module and iterate all entries through the sourced installer `canonical_agent_name()` helper, keeping a small separate list only for canonical names that are not aliases.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Read `test/install-agent-alias-parity.test.ts` and compare `ALIAS_CASES` with every key in `src/lib/agent/aliases.ts:4`; several exported aliases are not enumerated by the parity test.
  • Missing regression test: Add a test named like `keeps every exported AGENT_ALIASES key aligned with installer canonical_agent_name` that loops over `Object.entries(AGENT_ALIASES)` and asserts both TypeScript and shell return the same canonical target.
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: `src/lib/agent/aliases.ts` defines many Deep Agents alias variants, while `test/install-agent-alias-parity.test.ts` only checks selected values such as `nemo-deepagents`, `dcode`, `deepagents`, `deepagents-code`, and `langchain`.

PRA-3 Improvement — Add package bin metadata parity coverage for `nemo-deepagents`

  • Location: package.json:8
  • Category: tests
  • Problem: The new public alias depends on package metadata in both `package.json` and `package-lock.json`. Spawned symlink tests cover runtime behavior once a symlink exists, but I did not find a test that asserts the published package metadata will actually create that symlink for `nemo-deepagents`.
  • Impact: A future lockfile or manifest edit could leave `nemo-deepagents` out of published installs even though direct symlink-based tests continue to pass.
  • Suggested action: Add a lightweight metadata test that reads `package.json` and `package-lock.json` and asserts the `nemo-deepagents` bin entry exists in both files and points at the existing `bin/nemoclaw.js` launcher.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Search tests for `package.json.bin` or `package-lock` plus `nemo-deepagents`; current coverage exercises a hand-created symlink but not npm package metadata parity.
  • Missing regression test: Add a test named like `keeps nemo-deepagents package bin entries aligned with the shared launcher` asserting `package.json.bin['nemo-deepagents'] === './bin/nemoclaw.js'` and `package-lock.json.packages[''].bin['nemo-deepagents'] === 'bin/nemoclaw.js'`.
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: `package.json` and `package-lock.json` add `nemo-deepagents`, while `test/nemo-deepagents-alias.test.ts` creates its own temporary symlink instead of checking package metadata.
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 — Add package metadata parity coverage that `package.json.bin['nemo-deepagents']` and `package-lock.json.packages[''].bin['nemo-deepagents']` point at the shared `bin/nemoclaw.js` launcher.. The PR has strong focused unit and spawned-CLI coverage for the host alias, branding, update, and onboarding parsing paths. The remaining confidence gaps are lightweight packaging/source-of-truth regressions rather than broad E2E execution.
  • PRA-T2 Runtime validation — Add exhaustive installer parity coverage that iterates every exported `AGENT_ALIASES` key through `scripts/install.sh:canonical_agent_name()` and checks the same canonical target as TypeScript.. The PR has strong focused unit and spawned-CLI coverage for the host alias, branding, update, and onboarding parsing paths. The remaining confidence gaps are lightweight packaging/source-of-truth regressions rather than broad E2E execution.
  • PRA-T3 Runtime validation — Optionally add a sourced-installer helper test for `NEMOCLAW_AGENT=dcode` canonicalizing before `resolve_default_sandbox_name()` returns the `deepagents-code` fallback.. The PR has strong focused unit and spawned-CLI coverage for the host alias, branding, update, and onboarding parsing paths. The remaining confidence gaps are lightweight packaging/source-of-truth regressions rather than broad E2E execution.
  • PRA-T4 Expand installer alias parity to every exported TypeScript alias — In this PR, import `AGENT_ALIASES` from the built TypeScript module and iterate all entries through the sourced installer `canonical_agent_name()` helper, keeping a small separate list only for canonical names that are not aliases.
  • PRA-T5 Add package bin metadata parity coverage for `nemo-deepagents` — Add a lightweight metadata test that reads `package.json` and `package-lock.json` and asserts the `nemo-deepagents` bin entry exists in both files and points at the existing `bin/nemoclaw.js` launcher.
  • PRA-T6 Acceptance clause — No linked issue acceptance clauses were available in the deterministic GitHub context. — add test evidence or identify existing coverage. `linkedIssues` is empty for this PR, so there were no linked issue bodies or comments to extract literally; PR body text was used only as untrusted orientation.
  • PRA-T7 TypeScript and shell agent alias maps — Representative parity exists in `test/install-agent-alias-parity.test.ts`, but it does not iterate every exported `AGENT_ALIASES` key.. `src/lib/agent/aliases.ts` and `scripts/install.sh:canonical_agent_name()` contain parallel alias lists; the current parity test covers selected cases only.
Since last review details

Current findings, using the urgency labels above:

PRA-1 Resolve/justify — Source-of-truth review needed: TypeScript and shell agent alias maps

  • 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: Representative parity exists in `test/install-agent-alias-parity.test.ts`, but it does not iterate every exported `AGENT_ALIASES` key.
  • 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: `src/lib/agent/aliases.ts` and `scripts/install.sh:canonical_agent_name()` contain parallel alias lists; the current parity test covers selected cases only.

PRA-2 Improvement — Expand installer alias parity to every exported TypeScript alias

  • Location: test/install-agent-alias-parity.test.ts:16
  • Category: tests
  • Problem: The PR now has two alias sources of truth: `src/lib/agent/aliases.ts` for TypeScript paths and `scripts/install.sh:canonical_agent_name()` for installer/bootstrap paths. The current parity test covers representative cases, but not every key exported by `AGENT_ALIASES`, so a future alias can be added to one side without the test failing.
  • Impact: A drifted alias would make `nemoclaw onboard --agent <alias>` work differently from `curl|bash NEMOCLAW_AGENT=<alias>`, causing the installer to brand or provision a different runtime than the TypeScript CLI accepts.
  • Suggested action: In this PR, import `AGENT_ALIASES` from the built TypeScript module and iterate all entries through the sourced installer `canonical_agent_name()` helper, keeping a small separate list only for canonical names that are not aliases.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Read `test/install-agent-alias-parity.test.ts` and compare `ALIAS_CASES` with every key in `src/lib/agent/aliases.ts:4`; several exported aliases are not enumerated by the parity test.
  • Missing regression test: Add a test named like `keeps every exported AGENT_ALIASES key aligned with installer canonical_agent_name` that loops over `Object.entries(AGENT_ALIASES)` and asserts both TypeScript and shell return the same canonical target.
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: `src/lib/agent/aliases.ts` defines many Deep Agents alias variants, while `test/install-agent-alias-parity.test.ts` only checks selected values such as `nemo-deepagents`, `dcode`, `deepagents`, `deepagents-code`, and `langchain`.

PRA-3 Improvement — Add package bin metadata parity coverage for `nemo-deepagents`

  • Location: package.json:8
  • Category: tests
  • Problem: The new public alias depends on package metadata in both `package.json` and `package-lock.json`. Spawned symlink tests cover runtime behavior once a symlink exists, but I did not find a test that asserts the published package metadata will actually create that symlink for `nemo-deepagents`.
  • Impact: A future lockfile or manifest edit could leave `nemo-deepagents` out of published installs even though direct symlink-based tests continue to pass.
  • Suggested action: Add a lightweight metadata test that reads `package.json` and `package-lock.json` and asserts the `nemo-deepagents` bin entry exists in both files and points at the existing `bin/nemoclaw.js` launcher.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Search tests for `package.json.bin` or `package-lock` plus `nemo-deepagents`; current coverage exercises a hand-created symlink but not npm package metadata parity.
  • Missing regression test: Add a test named like `keeps nemo-deepagents package bin entries aligned with the shared launcher` asserting `package.json.bin['nemo-deepagents'] === './bin/nemoclaw.js'` and `package-lock.json.packages[''].bin['nemo-deepagents'] === 'bin/nemoclaw.js'`.
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: `package.json` and `package-lock.json` add `nemo-deepagents`, while `test/nemo-deepagents-alias.test.ts` creates its own temporary symlink instead of checking package metadata.

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: 3

🧹 Nitpick comments (3)
scripts/install.sh (1)

121-138: 📐 Maintainability & Code Quality | 🔵 Trivial

Single-source the deepagents alias list The langchain-deepagents-code aliases are duplicated in scripts/install.sh and src/lib/agent/defs.ts; consider generating one from the other or adding a parity test so installer canonicalization and CLI resolution can’t drift.

🤖 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 `@scripts/install.sh` around lines 121 - 138, The deepagents alias mapping is
duplicated between canonical_agent_name() and the agent definitions, so the
installer and CLI can drift. Update canonical_agent_name() to source the alias
list from the same canonical definition used in src/lib/agent/defs.ts, or add a
parity check/test that verifies both mappings stay identical. Keep the existing
normalization and preserve the canonical output for langchain-deepagents-code
and its aliases.
src/lib/agent/defs.ts (1)

124-202: 📐 Maintainability & Code Quality | 🔵 Trivial

Share alias resolution between defs.ts and legacy-command.ts
src/lib/onboard/legacy-command.ts duplicates normalizeAgentSelector, agentAliasSummary, and the alias mapping in resolveKnownAgentAlias even though src/lib/agent/defs.ts already centralizes the same logic. Import the shared helper(s) to keep onboarding and agent resolution from drifting when aliases change.

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

In `@src/lib/agent/defs.ts` around lines 124 - 202, `legacy-command.ts` is
duplicating the agent alias normalization/mapping logic that already exists in
`defs.ts`, which risks the onboarding and agent-resolution rules drifting apart.
Update `resolveKnownAgentAlias` to use the shared helpers from
`resolveAgentNameAlias` and `agentAliasSummary` in `src/lib/agent/defs.ts`, and
remove the local copies of `normalizeAgentSelector` and the alias table. Keep
`unknownAgentMessage`/call sites wired to the shared alias resolution so all
agent aliases are defined in one place.
docs/reference/commands-nemohermes.mdx (1)

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

Split this into one sentence per line.

This paragraph puts two sentences on the same source line, which breaks the docs formatting rule. As per path instructions, "One sentence per line in source (makes diffs readable)."

🤖 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-nemohermes.mdx` around lines 106 - 107, Split the
`--agent` documentation text in `commands-nemohermes.mdx` so each sentence is on
its own source line, keeping the same wording but placing the sentence about
canonical manifest names on one line and the sentence with the alias examples on
the next; use the existing `--agent` paragraph as the target location and
preserve the references to `nemohermes agents list`, `nemohermes`, `hermes`, and
`langchain-deepagents-code`.

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.

Inline comments:
In `@docs/reference/commands.mdx`:
- Line 147: The `--agent` description in the MDX source currently contains two
sentences on one line; split them so each sentence is on its own line while
keeping the wording unchanged. Update the `--agent` text in the commands
reference to preserve one sentence per line for readable diffs.

In `@src/lib/agent/defs.test.ts`:
- Around line 162-167: The test in resolveAgentName is leaking NEMOCLAW_AGENT
into later cases because it sets process.env.NEMOCLAW_AGENT without restoring
it. Save the previous value before setting it, then restore or delete
NEMOCLAW_AGENT after the expectation (use a try/finally around the
resolveAgentName call in defs.test.ts) so other tests still see the default
openclaw behavior.

In `@src/lib/onboard/legacy-command.ts`:
- Around line 66-68: `agentAliasSummary()` is currently hardcoded and can
advertise aliases for runtimes that are not installed, which conflicts with
`resolveKnownAgentAlias()` and the onboarding help text. Update the summary
generation to derive its output from `knownAgents` so only supported aliases are
shown, and reuse that same filtered helper in `agentAliasSummary()` and
`src/lib/onboard/agent-flag-help.ts` to keep the hints and validation aligned.

---

Nitpick comments:
In `@docs/reference/commands-nemohermes.mdx`:
- Around line 106-107: Split the `--agent` documentation text in
`commands-nemohermes.mdx` so each sentence is on its own source line, keeping
the same wording but placing the sentence about canonical manifest names on one
line and the sentence with the alias examples on the next; use the existing
`--agent` paragraph as the target location and preserve the references to
`nemohermes agents list`, `nemohermes`, `hermes`, and
`langchain-deepagents-code`.

In `@scripts/install.sh`:
- Around line 121-138: The deepagents alias mapping is duplicated between
canonical_agent_name() and the agent definitions, so the installer and CLI can
drift. Update canonical_agent_name() to source the alias list from the same
canonical definition used in src/lib/agent/defs.ts, or add a parity check/test
that verifies both mappings stay identical. Keep the existing normalization and
preserve the canonical output for langchain-deepagents-code and its aliases.

In `@src/lib/agent/defs.ts`:
- Around line 124-202: `legacy-command.ts` is duplicating the agent alias
normalization/mapping logic that already exists in `defs.ts`, which risks the
onboarding and agent-resolution rules drifting apart. Update
`resolveKnownAgentAlias` to use the shared helpers from `resolveAgentNameAlias`
and `agentAliasSummary` in `src/lib/agent/defs.ts`, and remove the local copies
of `normalizeAgentSelector` and the alias table. Keep `unknownAgentMessage`/call
sites wired to the shared alias resolution so all agent aliases are defined in
one place.
🪄 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: ecb09da3-4b31-45a4-9e32-a6a32bad4a67

📥 Commits

Reviewing files that changed from the base of the PR and between 9f48114 and 21b4dce.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (25)
  • bin/nemo-deepagents.js
  • ci/platform-matrix.json
  • docs/get-started/quickstart-langchain-deepagents-code.mdx
  • docs/reference/commands-nemohermes.mdx
  • docs/reference/commands.mdx
  • docs/reference/platform-support.mdx
  • package.json
  • scripts/install.sh
  • src/lib/actions/update.test.ts
  • src/lib/actions/update.ts
  • src/lib/agent/defs.test.ts
  • src/lib/agent/defs.ts
  • src/lib/cli/branding.test.ts
  • src/lib/cli/branding.ts
  • src/lib/onboard.ts
  • src/lib/onboard/agent-flag-help.test.ts
  • src/lib/onboard/agent-flag-help.ts
  • src/lib/onboard/command-support.test.ts
  • src/lib/onboard/legacy-command.test.ts
  • src/lib/onboard/legacy-command.ts
  • test/cli-oclif-compatibility.test.ts
  • test/cli/dispatch-basics.test.ts
  • test/generate-platform-docs.test.ts
  • test/nemo-deepagents-alias.test.ts
  • test/update.test.ts

Comment thread docs/reference/commands.mdx Outdated
Comment thread src/lib/agent/defs.test.ts
Comment thread src/lib/onboard/legacy-command.ts Outdated
@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 28261422006
Target ref: 21b4dceba791491e7bd6d1020295ee6d2da785fd
Workflow ref: main
Requested jobs: onboard-resume-e2e
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
onboard-resume-e2e ✅ success

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 28262108240
Target ref: adfa9ff6d259ede35abaf6a5813b8ca8de9ee910
Workflow ref: main
Requested jobs: onboard-resume-e2e
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
onboard-resume-e2e ✅ success

@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/update.test.ts (1)

15-20: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Temp dir/symlink is never cleaned up.

mkdtempSync creates a directory under os.tmpdir() that the IIFE never removes, so each run leaves a stray nemo-deepagents-update-bin-* dir + symlink behind. Consider registering an afterAll/process cleanup with fs.rmSync(dir, { recursive: true, force: true }).

🤖 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/update.test.ts` around lines 15 - 20, The temporary directory and
symlink created in DEEPAGENTS_CLI are never cleaned up, leaving stray test
artifacts behind. Update the setup around the mkdtempSync IIFE to retain the
generated dir path and register cleanup in the test lifecycle or process
teardown, using fs.rmSync with recursive and force options to remove the
temporary alias directory after the tests finish.
🤖 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/update.test.ts`:
- Around line 15-20: The temporary directory and symlink created in
DEEPAGENTS_CLI are never cleaned up, leaving stray test artifacts behind. Update
the setup around the mkdtempSync IIFE to retain the generated dir path and
register cleanup in the test lifecycle or process teardown, using fs.rmSync with
recursive and force options to remove the temporary alias directory after the
tests finish.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 58a4f0f9-04e1-4b85-ba27-d76f6a97360d

📥 Commits

Reviewing files that changed from the base of the PR and between 21b4dce and af23e1b.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (5)
  • bin/nemoclaw.js
  • package.json
  • test/cli-oclif-compatibility.test.ts
  • test/nemo-deepagents-alias.test.ts
  • test/update.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • test/nemo-deepagents-alias.test.ts

Comment thread src/lib/agent/defs.ts
Comment on lines +11 to +15
import {
agentAliasSummary,
formatAgentAliasSuffix,
resolveAgentNameAlias as resolveKnownAgentNameAlias,
} from "./aliases";
Comment thread src/lib/agent/defs.ts
Comment on lines +11 to +15
import {
agentAliasSummary,
formatAgentAliasSuffix,
resolveAgentNameAlias as resolveKnownAgentNameAlias,
} from "./aliases";

@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/install-agent-alias-parity.test.ts (1)

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

Cover normalization-driven aliases too.

This parity test only exercises already-normalized inputs, so it would miss drift in the case/underscore/space normalization both sides rely on. Add a few inputs like NEMO_DEEPAGENTS, Deep Agents Code, or LANGCHAIN so the test locks the full canonicalization contract, not just direct alias table entries.

Suggested expansion
 const ALIAS_CASES = [
   ["openclaw", "openclaw"],
   ["nemoclaw", "openclaw"],
   ["hermes", "hermes"],
   ["nemohermes", "hermes"],
   ["langchain-deepagents-code", "langchain-deepagents-code"],
   ["nemo-deepagents", "langchain-deepagents-code"],
+  ["NEMO_DEEPAGENTS", "langchain-deepagents-code"],
   ["dcode", "langchain-deepagents-code"],
   ["deepagents", "langchain-deepagents-code"],
+  ["Deep Agents", "langchain-deepagents-code"],
   ["deepagents-code", "langchain-deepagents-code"],
   ["deepagentscode", "langchain-deepagents-code"],
   ["langchain", "langchain-deepagents-code"],
+  ["LANGCHAIN", "langchain-deepagents-code"],
 ] as const;
🤖 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/install-agent-alias-parity.test.ts` around lines 13 - 25, The parity
test in ALIAS_CASES only covers direct alias-table inputs and misses
normalization behavior. Expand the cases used by the install-agent alias test to
include uppercase, underscore, and spaced variants such as NEMO_DEEPAGENTS, Deep
Agents Code, and LANGCHAIN, so the test verifies the canonicalization path
exercised by the alias resolution logic.
🤖 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/install-agent-alias-parity.test.ts`:
- Around line 13-25: The parity test in ALIAS_CASES only covers direct
alias-table inputs and misses normalization behavior. Expand the cases used by
the install-agent alias test to include uppercase, underscore, and spaced
variants such as NEMO_DEEPAGENTS, Deep Agents Code, and LANGCHAIN, so the test
verifies the canonicalization path exercised by the alias resolution logic.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: a268a00a-7e17-4c85-aef4-6d12c3abfb6c

📥 Commits

Reviewing files that changed from the base of the PR and between af23e1b and 45ff30b.

📒 Files selected for processing (16)
  • docs/reference/commands-nemohermes.mdx
  • docs/reference/commands.mdx
  • src/lib/actions/update.test.ts
  • src/lib/actions/update.ts
  • src/lib/agent/aliases.ts
  • src/lib/agent/defs.test.ts
  • src/lib/agent/defs.ts
  • src/lib/onboard/agent-flag-help.test.ts
  • src/lib/onboard/agent-flag-help.ts
  • src/lib/onboard/command-support.test.ts
  • src/lib/onboard/legacy-command.ts
  • test/cli-oclif-compatibility.test.ts
  • test/cli/dispatch-basics.test.ts
  • test/install-agent-alias-parity.test.ts
  • test/nemo-deepagents-alias.test.ts
  • test/update.test.ts
✅ Files skipped from review due to trivial changes (5)
  • test/cli/dispatch-basics.test.ts
  • src/lib/agent/aliases.ts
  • src/lib/onboard/agent-flag-help.test.ts
  • docs/reference/commands.mdx
  • docs/reference/commands-nemohermes.mdx
🚧 Files skipped from review as they are similar to previous changes (7)
  • src/lib/onboard/agent-flag-help.ts
  • src/lib/agent/defs.test.ts
  • test/cli-oclif-compatibility.test.ts
  • test/update.test.ts
  • src/lib/actions/update.ts
  • src/lib/actions/update.test.ts
  • test/nemo-deepagents-alias.test.ts

@cv cv added the v0.0.69 label Jun 26, 2026
@cv
cv merged commit 49f3163 into main Jun 26, 2026
47 checks passed
@cv
cv deleted the feat/deepagents-agent-aliases branch June 26, 2026 21:19
cv added a commit that referenced this pull request Jun 26, 2026
<!-- markdownlint-disable MD041 -->
## Summary
Follow-up to #5881 that addresses automated review feedback after the
Deep Agents alias PR merged.
It removes an unused alias import and expands installer/TypeScript alias
parity coverage so every exported alias key is checked.

## Changes
- Removed the unused `agentAliasSummary` named import from
`src/lib/agent/defs.ts`.
- Changed `test/install-agent-alias-parity.test.ts` to derive parity
cases from exported `AGENT_ALIASES` rather than a hand-picked subset.
- Kept normalization-only cases for uppercase, underscore, and spaced
alias inputs.

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

## 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. -->
- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] Tests not applicable — justification:
- [ ] Docs updated for user-facing behavior changes
- [x] Docs not applicable — justification: follow-up only changes an
unused import and test coverage.
- [ ] 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
- [x] 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)
- [ ] 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)

Verification commands run:
- `npm run build:cli`
- `npx vitest run test/install-agent-alias-parity.test.ts
src/lib/agent/defs.test.ts --reporter=dot`
- `npm run typecheck:cli`
- Commit and push hooks passed.

---
<!-- 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: Carlos Villela <cvillela@nvidia.com>


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

## Summary by CodeRabbit

* **Tests**
* Improved alias coverage by generating test cases dynamically, helping
ensure agent name matching stays consistent across more inputs.
* **Chores**
  * Cleaned up internal module imports without changing public behavior.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@wscurran wscurran added area: cli Command line interface, flags, terminal UX, or output area: docs Documentation, examples, guides, or docs build feature PR adds or expands user-visible functionality labels Jun 29, 2026
@wscurran wscurran added the integration: dcode LangChain Deep Code integration behavior label Jun 29, 2026
cv pushed a commit that referenced this pull request Jun 29, 2026
## Summary
Adds the v0.0.69 release notes to the published release-notes page so
users can see the shipped sandbox recovery, Deep Agents Code, Hermes,
inference, policy, and release-validation changes.
The section is based on the v0.0.69 announcement and links each
user-facing theme to the deeper docs pages that already cover the
behavior.

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

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

## Type of Change

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

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

## Verification
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] Git hooks passed during commit and push, or `npx prek run
--from-ref main --to-ref HEAD` passes
- [ ] Targeted tests pass for changed behavior
- [ ] Full `npm test` passes (broad runtime changes only)
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only)
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

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

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

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

* **Documentation**
* Added release notes for **v0.0.69**, covering improved sandbox
lifecycle recovery (state preservation across
destroy/recreate/rebuild/recovery/validation failures), clearer Deep
Agents Code terminal/CLI behavior, and safer Hermes messaging/provider
switching with manifest-driven channels.
* Improved inference setup validation guidance, including handling of
local/compatible endpoints and redaction of sensitive validation errors.
* Refreshed release-gate documentation with clearer approval examples
and validation behavior for NVIDIA API keys vs hosted inference keys.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- markdownlint-disable MD041 -->
## Summary
Adds a `nemo-deepagents` host CLI alias for the LangChain Deep Agents
Code runtime and teaches onboarding to accept common user-facing agent
aliases. This lets users run `nemo-deepagents onboard` or shorter forms
such as `nemoclaw onboard --agent dcode`, `--agent deepagents`, and
`--agent langchain` instead of remembering `langchain-deepagents-code`.

## Changes
- Registered `nemo-deepagents` as an npm bin that reuses the existing
`bin/nemoclaw.js` launcher and selects Deep Agents Code when invoked
through that symlink.
- Added canonical agent alias resolution for `--agent` and
`NEMOCLAW_AGENT`, including `nemohermes`, `dcode`, `deepagents`,
`deepagents-code`, `langchain`, and related variants.
- Updated CLI branding, installer/update branding, onboard `--agent`
help, and unknown-agent diagnostics for the alias set.
- Updated Deep Agents quickstart, command reference, and platform
support docs; adjusted platform-doc validation to allow documented
aliases.
- Added/updated tests for CLI alias behavior, onboarding arg
parsing/help, agent definition alias resolution, update copy, oclif
help, and platform-doc validation.

## Type of Change

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

## 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. -->
- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] Tests not applicable — justification:
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [x] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [x] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification: self-review; changes
are limited to agent selector canonicalization, launcher branding,
installer alias selection, docs, and tests, with no credential handling
or network-policy enforcement changes.
- [ ] 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
- [x] Targeted tests pass for changed behavior
- [ ] Full `npm test` passes (broad runtime changes only)
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only)
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

Verification commands run:
- `npm run build:cli`
- `npx vitest run test/nemohermes-alias.test.ts
test/nemo-deepagents-alias.test.ts test/update.test.ts
test/cli-oclif-compatibility.test.ts src/lib/cli/branding.test.ts
src/lib/actions/update.test.ts src/lib/agent/defs.test.ts
src/lib/onboard/legacy-command.test.ts
src/lib/onboard/agent-flag-help.test.ts
src/lib/onboard/command-support.test.ts test/cli/dispatch-basics.test.ts
test/generate-platform-docs.test.ts --reporter=dot`
- `NEMOCLAW_RUN_INSTALLER_TESTS=1 npx vitest run --project
installer-integration test/install-preflight.test.ts --reporter=dot`
- `npm run typecheck:cli`
- `npm run validate:configs`
- `python3 scripts/generate-platform-docs.py --check`
- `npm run docs` (passed; Fern reported two hidden warnings)
- Commit hooks passed; latest push hooks passed.

---
<!-- 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: Carlos Villela <cvillela@nvidia.com>


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

* **New Features**
* Added a `nemo-deepagents` CLI alias for Deep Agents with matching
branding, help, onboarding, uninstall, and update flows.
* **Documentation**
* Updated quickstart and command/reference docs to use the Deep Agents
CLI wrapper and clarified `--agent` alias vs canonical name behavior.
* Refreshed platform support/onboarding matrix entries for the new
alias.
* **Bug Fixes**
* Improved agent selector alias resolution and enhanced “unknown agent”
guidance with supported alias mappings.
  * Sanitized Deep Agents update environment variables during installs.
* **Tests**
* Added/expanded coverage for Deep Agents alias behavior and alias
canonicalization.
<!-- 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
<!-- markdownlint-disable MD041 -->
## Summary
Follow-up to NVIDIA#5881 that addresses automated review feedback after the
Deep Agents alias PR merged.
It removes an unused alias import and expands installer/TypeScript alias
parity coverage so every exported alias key is checked.

## Changes
- Removed the unused `agentAliasSummary` named import from
`src/lib/agent/defs.ts`.
- Changed `test/install-agent-alias-parity.test.ts` to derive parity
cases from exported `AGENT_ALIASES` rather than a hand-picked subset.
- Kept normalization-only cases for uppercase, underscore, and spaced
alias inputs.

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

## 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. -->
- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] Tests not applicable — justification:
- [ ] Docs updated for user-facing behavior changes
- [x] Docs not applicable — justification: follow-up only changes an
unused import and test coverage.
- [ ] 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
- [x] 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)
- [ ] 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)

Verification commands run:
- `npm run build:cli`
- `npx vitest run test/install-agent-alias-parity.test.ts
src/lib/agent/defs.test.ts --reporter=dot`
- `npm run typecheck:cli`
- Commit and push hooks passed.

---
<!-- 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: Carlos Villela <cvillela@nvidia.com>


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

## Summary by CodeRabbit

* **Tests**
* Improved alias coverage by generating test cases dynamically, helping
ensure agent name matching stays consistent across more inputs.
* **Chores**
  * Cleaned up internal module imports without changing public behavior.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
## Summary
Adds the v0.0.69 release notes to the published release-notes page so
users can see the shipped sandbox recovery, Deep Agents Code, Hermes,
inference, policy, and release-validation changes.
The section is based on the v0.0.69 announcement and links each
user-facing theme to the deeper docs pages that already cover the
behavior.

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

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

## Type of Change

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

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

## Verification
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] Git hooks passed during commit and push, or `npx prek run
--from-ref main --to-ref HEAD` passes
- [ ] Targeted tests pass for changed behavior
- [ ] Full `npm test` passes (broad runtime changes only)
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only)
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

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

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

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

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

Labels

area: cli Command line interface, flags, terminal UX, or output area: docs Documentation, examples, guides, or docs build feature PR adds or expands user-visible functionality integration: dcode LangChain Deep Code integration behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants