Skip to content

chore(studio): rename coding agent to Nemo Copilot - #1068

Merged
dmariali merged 5 commits into
mainfrom
rename-coding-agent
Aug 4, 2026
Merged

chore(studio): rename coding agent to Nemo Copilot#1068
dmariali merged 5 commits into
mainfrom
rename-coding-agent

Conversation

@dmariali

@dmariali dmariali commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • New Features

    • Introduced NeMo Copilot as the updated Studio assistant experience.
    • Added Copilot workflows for workspaces, models, datasets, files, inference providers, secrets, evaluations, guardrails, and audits.
    • Added evaluation coverage for workspace details, workspace listings, models, and inference providers.
  • Updates

    • Updated Studio navigation, routes, feature flags, labels, prompts, error messages, deployment settings, and chat metadata to use NeMo Copilot branding.
    • Improved resource matching for prompts that list specific resources.
    • Updated local development configuration and platform login guidance.

@dmariali
dmariali requested review from a team as code owners August 4, 2026 15:16
@github-actions github-actions Bot added the chore label Aug 4, 2026
Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Aug 4, 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: 436ff090-f7c2-4a82-83e0-f0f6420f4680

📥 Commits

Reviewing files that changed from the base of the PR and between 59ad333 and 4a9cc48.

📒 Files selected for processing (2)
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
🚧 Files skipped from review as they are similar to previous changes (2)
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py

📝 Walkthrough

Walkthrough

The pull request rebrands the NeMo agent as NeMo Copilot across the agent package, Studio bridge, API routes, feature flags, web routes, deployment configuration, skills, and tests.

Changes

NeMo Copilot rebrand

Layer / File(s) Summary
Agent package, wrapper, and deployment wiring
agents/nemo-studio-copilot/**, pyproject.toml
Package metadata, wrapper classes, Docker configuration, entry points, evaluation assets, skills, callback routes, register functions, and type-resolution paths use NeMo Copilot names.
Studio Copilot bridge
services/studio/src/nmp/studio/*, services/studio/tests/unit/*
Studio uses Copilot endpoints, artifacts, prompts, MCP context, configuration, upstream invocation, streaming, service mounting, and tests.
Web routes and feature flags
web/packages/studio/env/*, web/packages/studio/src/constants/*, web/packages/studio/src/routes/*
Feature flags, route constants, route gates, dashboard navigation, deployment fixtures, labels, chat routes, and tests use Copilot names and /dashboard/copilot.
Web chat and artifact integration
web/packages/studio/src/components/*, web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/*
The API client targets /apis/studio/v2/copilot. Chat navigation, model metadata, accessibility labels, history, streaming messages, runtime errors, and tests use Copilot identifiers.

Sequence Diagram(s)

sequenceDiagram
  participant StudioUI as Studio UI
  participant CopilotBridge as Studio Copilot Bridge
  participant CopilotService as NeMo Copilot Service
  StudioUI->>CopilotBridge: Send message on /v2/copilot/messages
  CopilotBridge->>CopilotService: Invoke with Copilot prompt and headers
  CopilotService-->>CopilotBridge: Stream response events
  CopilotBridge->>CopilotBridge: Record copilot_model artifact
  CopilotBridge-->>StudioUI: Stream chat events
Loading

Possibly related PRs

Suggested labels: breaking

Suggested reviewers: aray12

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the primary change: renaming the Studio coding agent to Nemo Copilot.
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 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch rename-coding-agent

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

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

🧹 Nitpick comments (1)
web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.ts (1)

544-544: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Exercise copilot_model parsing in this fixture.

The response has no chat_artifacts, so this assertion only checks the empty default. It would pass if copilot_model parsing were broken. Add a populated chat_artifacts object and assert the returned value.

Proposed regression fixture
 JSON.stringify({
   session_id: 'session-1',
+  chat_artifacts: {
+    model_source: 'copilot',
+    copilot_model: 'claude-sonnet-4-6',
+  },
   items: [
     // ...
   ],
 })

-        copilot_model: undefined,
+        copilot_model: 'claude-sonnet-4-6',
🤖 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 `@web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.ts` at
line 544, Update the fixture around copilot_model in the relevant API test to
include a populated chat_artifacts object containing a copilot_model value, then
assert that the parsed response returns that value instead of only validating
the empty default. Keep the test focused on exercising copilot_model parsing.
🤖 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
`@agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.json`:
- Around line 10-12: Update the fast-path handling for the evaluation input in
nemo-studio-copilot-eval-data.json so a request for both models and inference
providers returns both resources instead of selecting only models;
alternatively, split this into separate evaluation cases with expectations
covering each resource.

In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md`:
- Line 5: Fix the MD041 violations by making the first content line after front
matter a top-level heading: in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md lines
5-5, prefix “Auditor tasks” with a heading marker; apply the equivalent change
to “Entity tasks” in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.md
lines 5-5 and “Evaluator tasks” in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md
lines 5-5.

In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md`:
- Line 18: Update the retry guidance in SKILL.md so failed file mutations,
including fileset creation and upload_content, are not retried blindly. Before
retrying a write operation, verify the resource state or use an idempotency
mechanism; only retry when duplication is prevented, while preserving the
existing one-retry behavior for safe steps.
- Around line 16-18: Update the execution sequence in SKILL.md so that, when a
later step fails after two attempts, it performs best-effort cleanup of
temporary resources created during the run before returning the error. Preserve
the existing stop-after-retry behavior, and ensure cleanup failures do not
prevent returning the original error.
- Around line 7-14: Update the nemo_api examples for files.upload_content and
files.download_content, including the additional examples around the referenced
section, so each params value is passed as a quoted JSON string rather than an
inline JSON object. Preserve the existing payload fields and values while
matching the params: str contract in register.py.
- Line 5: Update the top-level title after the YAML front matter in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md:5-5,
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md:5-5,
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md:5-5,
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md:5-5,
and
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md:5-5
by adding Markdown heading syntax to each existing title: File tasks, Guardrails
tasks, Inference provider tasks, Secret tasks, and Workspace tasks.

In `@services/studio/src/nmp/studio/copilot.py`:
- Around line 67-69: Update _copilot_request_headers and the configured Copilot
URL handling to prevent user credentials from being sent over plaintext HTTP:
require DEFAULT_STUDIO_COPILOT_BASE_URL and any configured URL to use HTTPS, or
strip Authorization and Cookie before HTTP requests. Preserve credential
forwarding only for HTTPS requests.
- Around line 1449-1457: Add a Cache-Control header set to no-store when
constructing the StreamingResponse in the Copilot streaming endpoint, and update
the corresponding endpoint test to assert this header is present.

In `@services/studio/src/nmp/studio/env_mappings.py`:
- Around line 73-75: Update the EnvMapping definition for
STUDIO_UI_VITE_FF_COPILOT_STUDIO_ENABLED to implement backward compatibility
with the renamed feature flag. The mapping currently reads only from the new
config_path studio.feature_flags.copilot_studio_enabled with a default of false,
which breaks existing deployments using the old key
studio.feature_flags.coding_agent_studio_enabled. Modify the mapping mechanism
to check the new key first, and if absent, fall back to the old key before
applying the default value, ensuring upgraded deployments preserve their
existing flag state.

In `@web/packages/studio/env/.env.dev.local.sample`:
- Line 26: Update the VITE_FF_COPILOT_STUDIO_ENABLED entry in the environment
sample to use the unquoted boolean value false, removing both quote characters
so it passes dotenv-linter.

---

Nitpick comments:
In `@web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.ts`:
- Line 544: Update the fixture around copilot_model in the relevant API test to
include a populated chat_artifacts object containing a copilot_model value, then
assert that the parsed response returns that value instead of only validating
the empty default. Keep the test focused on exercising copilot_model parsing.
🪄 Autofix

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: ec2b50de-112a-451a-bd48-22f88b5f9ca7

📥 Commits

Reviewing files that changed from the base of the PR and between 2eb952f and 4bae0ab.

⛔ Files ignored due to path filters (1)
  • agents/nemo-studio-copilot/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (80)
  • agents/nemo-studio-copilot-spec/AGENT-SPEC.md
  • agents/nemo-studio-copilot/.dockerignore
  • agents/nemo-studio-copilot/Dockerfile
  • agents/nemo-studio-copilot/pyproject.toml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.json
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/.gitkeep
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.py
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
  • pyproject.toml
  • services/studio/src/nmp/studio/copilot.py
  • services/studio/src/nmp/studio/copilot_artifacts.py
  • services/studio/src/nmp/studio/copilot_mcp_tools.py
  • services/studio/src/nmp/studio/copilot_skills.py
  • services/studio/src/nmp/studio/env_mappings.py
  • services/studio/src/nmp/studio/service.py
  • services/studio/src/nmp/studio/studio_links.py
  • services/studio/tests/unit/test_copilot.py
  • services/studio/tests/unit/test_service.py
  • web/packages/studio/env/.env.dev.local.sample
  • web/packages/studio/env/.env.fastapi
  • web/packages/studio/src/components/CustomizeModelModal/constants.ts
  • web/packages/studio/src/components/ExperimentCreateModal/index.tsx
  • web/packages/studio/src/components/Layouts/GlobalNav/index.test.tsx
  • web/packages/studio/src/components/Layouts/GlobalNav/index.tsx
  • web/packages/studio/src/components/dataViews/EvaluationSessionsDataView/Empty.tsx
  • web/packages/studio/src/components/dataViews/ExperimentDataView/Empty.tsx
  • web/packages/studio/src/constants/environment.ts
  • web/packages/studio/src/constants/featureFlags/featureFlags.ts
  • web/packages/studio/src/constants/routes.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/SkillActionSection.tsx
  • web/packages/studio/src/routes/DashboardLandingRoute/index.test.tsx
  • web/packages/studio/src/routes/DashboardLandingRoute/index.tsx
  • web/packages/studio/src/routes/PageLayout/index.tsx
  • web/packages/studio/src/routes/RootRedirect/index.test.tsx
  • web/packages/studio/src/routes/WorkspaceLayout/WorkspaceSideNav.tsx
  • web/packages/studio/src/routes/agents/AgentDeploymentsListRoute/CreateDeploymentModal/index.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeLayout.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/JobProgressToolCall.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/context/ClaudeCodeChatProvider.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/HistoryPanelContents.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/SkillsPanelContents.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/helpers.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/studioUiNavigationSuggestions.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/toolParts.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/types.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.ts
  • web/packages/studio/src/routes/groups/dashboardRoutes.tsx
  • web/packages/studio/src/routes/index.test.tsx
  • web/packages/studio/src/routes/utils.ts

Comment thread services/studio/src/nmp/studio/copilot.py
Comment thread services/studio/src/nmp/studio/copilot.py
Comment thread services/studio/src/nmp/studio/env_mappings.py
Comment thread web/packages/studio/env/.env.dev.local.sample Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

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

Actionable comments posted: 10

🧹 Nitpick comments (1)
web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.ts (1)

544-544: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Exercise copilot_model parsing in this fixture.

The response has no chat_artifacts, so this assertion only checks the empty default. It would pass if copilot_model parsing were broken. Add a populated chat_artifacts object and assert the returned value.

Proposed regression fixture
 JSON.stringify({
   session_id: 'session-1',
+  chat_artifacts: {
+    model_source: 'copilot',
+    copilot_model: 'claude-sonnet-4-6',
+  },
   items: [
     // ...
   ],
 })

-        copilot_model: undefined,
+        copilot_model: 'claude-sonnet-4-6',
🤖 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 `@web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.ts` at
line 544, Update the fixture around copilot_model in the relevant API test to
include a populated chat_artifacts object containing a copilot_model value, then
assert that the parsed response returns that value instead of only validating
the empty default. Keep the test focused on exercising copilot_model parsing.
🤖 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
`@agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.json`:
- Around line 10-12: Update the fast-path handling for the evaluation input in
nemo-studio-copilot-eval-data.json so a request for both models and inference
providers returns both resources instead of selecting only models;
alternatively, split this into separate evaluation cases with expectations
covering each resource.

In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md`:
- Line 5: Fix the MD041 violations by making the first content line after front
matter a top-level heading: in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md lines
5-5, prefix “Auditor tasks” with a heading marker; apply the equivalent change
to “Entity tasks” in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.md
lines 5-5 and “Evaluator tasks” in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md
lines 5-5.

In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md`:
- Line 18: Update the retry guidance in SKILL.md so failed file mutations,
including fileset creation and upload_content, are not retried blindly. Before
retrying a write operation, verify the resource state or use an idempotency
mechanism; only retry when duplication is prevented, while preserving the
existing one-retry behavior for safe steps.
- Around line 16-18: Update the execution sequence in SKILL.md so that, when a
later step fails after two attempts, it performs best-effort cleanup of
temporary resources created during the run before returning the error. Preserve
the existing stop-after-retry behavior, and ensure cleanup failures do not
prevent returning the original error.
- Around line 7-14: Update the nemo_api examples for files.upload_content and
files.download_content, including the additional examples around the referenced
section, so each params value is passed as a quoted JSON string rather than an
inline JSON object. Preserve the existing payload fields and values while
matching the params: str contract in register.py.
- Line 5: Update the top-level title after the YAML front matter in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md:5-5,
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md:5-5,
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md:5-5,
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md:5-5,
and
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md:5-5
by adding Markdown heading syntax to each existing title: File tasks, Guardrails
tasks, Inference provider tasks, Secret tasks, and Workspace tasks.

In `@services/studio/src/nmp/studio/copilot.py`:
- Around line 67-69: Update _copilot_request_headers and the configured Copilot
URL handling to prevent user credentials from being sent over plaintext HTTP:
require DEFAULT_STUDIO_COPILOT_BASE_URL and any configured URL to use HTTPS, or
strip Authorization and Cookie before HTTP requests. Preserve credential
forwarding only for HTTPS requests.
- Around line 1449-1457: Add a Cache-Control header set to no-store when
constructing the StreamingResponse in the Copilot streaming endpoint, and update
the corresponding endpoint test to assert this header is present.

In `@services/studio/src/nmp/studio/env_mappings.py`:
- Around line 73-75: Update the EnvMapping definition for
STUDIO_UI_VITE_FF_COPILOT_STUDIO_ENABLED to implement backward compatibility
with the renamed feature flag. The mapping currently reads only from the new
config_path studio.feature_flags.copilot_studio_enabled with a default of false,
which breaks existing deployments using the old key
studio.feature_flags.coding_agent_studio_enabled. Modify the mapping mechanism
to check the new key first, and if absent, fall back to the old key before
applying the default value, ensuring upgraded deployments preserve their
existing flag state.

In `@web/packages/studio/env/.env.dev.local.sample`:
- Line 26: Update the VITE_FF_COPILOT_STUDIO_ENABLED entry in the environment
sample to use the unquoted boolean value false, removing both quote characters
so it passes dotenv-linter.

---

Nitpick comments:
In `@web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.ts`:
- Line 544: Update the fixture around copilot_model in the relevant API test to
include a populated chat_artifacts object containing a copilot_model value, then
assert that the parsed response returns that value instead of only validating
the empty default. Keep the test focused on exercising copilot_model parsing.
🪄 Autofix

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: ec2b50de-112a-451a-bd48-22f88b5f9ca7

📥 Commits

Reviewing files that changed from the base of the PR and between 2eb952f and 4bae0ab.

⛔ Files ignored due to path filters (1)
  • agents/nemo-studio-copilot/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (80)
  • agents/nemo-studio-copilot-spec/AGENT-SPEC.md
  • agents/nemo-studio-copilot/.dockerignore
  • agents/nemo-studio-copilot/Dockerfile
  • agents/nemo-studio-copilot/pyproject.toml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.json
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/.gitkeep
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.py
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
  • pyproject.toml
  • services/studio/src/nmp/studio/copilot.py
  • services/studio/src/nmp/studio/copilot_artifacts.py
  • services/studio/src/nmp/studio/copilot_mcp_tools.py
  • services/studio/src/nmp/studio/copilot_skills.py
  • services/studio/src/nmp/studio/env_mappings.py
  • services/studio/src/nmp/studio/service.py
  • services/studio/src/nmp/studio/studio_links.py
  • services/studio/tests/unit/test_copilot.py
  • services/studio/tests/unit/test_service.py
  • web/packages/studio/env/.env.dev.local.sample
  • web/packages/studio/env/.env.fastapi
  • web/packages/studio/src/components/CustomizeModelModal/constants.ts
  • web/packages/studio/src/components/ExperimentCreateModal/index.tsx
  • web/packages/studio/src/components/Layouts/GlobalNav/index.test.tsx
  • web/packages/studio/src/components/Layouts/GlobalNav/index.tsx
  • web/packages/studio/src/components/dataViews/EvaluationSessionsDataView/Empty.tsx
  • web/packages/studio/src/components/dataViews/ExperimentDataView/Empty.tsx
  • web/packages/studio/src/constants/environment.ts
  • web/packages/studio/src/constants/featureFlags/featureFlags.ts
  • web/packages/studio/src/constants/routes.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/SkillActionSection.tsx
  • web/packages/studio/src/routes/DashboardLandingRoute/index.test.tsx
  • web/packages/studio/src/routes/DashboardLandingRoute/index.tsx
  • web/packages/studio/src/routes/PageLayout/index.tsx
  • web/packages/studio/src/routes/RootRedirect/index.test.tsx
  • web/packages/studio/src/routes/WorkspaceLayout/WorkspaceSideNav.tsx
  • web/packages/studio/src/routes/agents/AgentDeploymentsListRoute/CreateDeploymentModal/index.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeLayout.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/JobProgressToolCall.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/context/ClaudeCodeChatProvider.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/HistoryPanelContents.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/SkillsPanelContents.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/helpers.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/studioUiNavigationSuggestions.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/toolParts.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/types.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.ts
  • web/packages/studio/src/routes/groups/dashboardRoutes.tsx
  • web/packages/studio/src/routes/index.test.tsx
  • web/packages/studio/src/routes/utils.ts
🛑 Comments failed to post (6)
agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.json (1)

10-12: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

rg -n -C 4 \
  'models|providers|_active_workspace|workspace' \
  agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py \
  agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 50381


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf '%s\n' '--- evaluation data ---'
cat -n agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.json

printf '%s\n' '--- evaluation configuration references ---'
rg -n -C 3 'nemo-studio-copilot-eval-data|expected_output|input_message' \
  agents/nemo-studio-copilot \
  -g '*.yaml' -g '*.yml' -g '*.json' -g '*.py'

printf '%s\n' '--- direct-list implementation ---'
sed -n '80,165p' agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py

printf '%s\n' '--- exact tests for direct listing ---'
sed -n '598,675p' agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 20511


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf '%s\n' '--- list fast-path call flow ---'
rg -n -C 8 \
  '_direct_list_resource|_list_resource_names|_StreamSafeGraph|direct_list' \
  agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py \
  agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py

printf '%s\n' '--- workspace/client construction ---'
sed -n '125,160p' agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
sed -n '190,205p' agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py

printf '%s\n' '--- deterministic resource-selection probe ---'
python3 - <<'PY'
import re

prompt = "List the available models and inference providers using the platform API."
direct_list_request = re.compile(r"\b(list|show|display|what)\b", re.I)
fast_path_mutation = re.compile(r"\b(create|delete|remove|update|deploy|cancel|upload)\b", re.I)
fast_path_analysis = re.compile(r"\b(analy[sz]e|audit|compare|explain|investigate|why)\b", re.I)
resources = (
    (re.compile(r"\bworkspaces?\b", re.I), "workspaces"),
    (re.compile(r"\bmodels?\b", re.I), "models"),
    (re.compile(r"\bproviders?\b", re.I), "inference.providers"),
)
assert direct_list_request.search(prompt)
assert not fast_path_mutation.search(prompt)
assert not fast_path_analysis.search(prompt)
selected = next((path for pattern, path in resources if pattern.search(prompt)), None)
print({"prompt": prompt, "selected_resource": selected, "all_matching_resources": [
    path for pattern, path in resources if pattern.search(prompt)
]})
PY

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 39138


Handle multi-resource list requests.

This input matches both models and inference.providers, but the fast path selects models first and omits providers. Update the fast path or split the evaluation case.

🤖 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
`@agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.json`
around lines 10 - 12, Update the fast-path handling for the evaluation input in
nemo-studio-copilot-eval-data.json so a request for both models and inference
providers returns both resources instead of selecting only models;
alternatively, split this into separate evaluation cases with expectations
covering each resource.
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md (1)

5-5: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a top-level heading to each affected skill.

markdownlint-cli2 reports MD041 for these files because the first content line after front matter is plain text.

  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md#L5-L5: change Auditor tasks to # Auditor tasks.
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.md#L5-L5: change Entity tasks to # Entity tasks.
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md#L5-L5: change Evaluator tasks to # Evaluator tasks.
🧰 Tools
🪛 markdownlint-cli2 (0.23.1)

[warning] 5-5: First line in a file should be a top-level heading

(MD041, first-line-heading, first-line-h1)

📍 Affects 3 files
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md#L5-L5 (this comment)
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.md#L5-L5
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md#L5-L5
🤖 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 `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md`
at line 5, Fix the MD041 violations by making the first content line after front
matter a top-level heading: in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md lines
5-5, prefix “Auditor tasks” with a heading marker; apply the equivalent change
to “Entity tasks” in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.md
lines 5-5 and “Evaluator tasks” in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md
lines 5-5.

Source: Linters/SAST tools

agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md (4)

5-5: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a top-level heading after the YAML front matter in each skill file.

markdownlint-cli2 reports MD041 at Line 5 in all five files.

  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md#L5-L5: change File tasks to # File tasks.
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md#L5-L5: change Guardrails tasks to # Guardrails tasks.
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md#L5-L5: change Inference provider tasks to # Inference provider tasks.
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md#L5-L5: change Secret tasks to # Secret tasks.
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md#L5-L5: change Workspace tasks to # Workspace tasks.
🧰 Tools
🪛 markdownlint-cli2 (0.23.1)

[warning] 5-5: First line in a file should be a top-level heading

(MD041, first-line-heading, first-line-h1)

📍 Affects 5 files
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md#L5-L5 (this comment)
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md#L5-L5
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md#L5-L5
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md#L5-L5
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md#L5-L5
🤖 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 `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md` at
line 5, Update the top-level title after the YAML front matter in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md:5-5,
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md:5-5,
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md:5-5,
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md:5-5,
and
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md:5-5
by adding Markdown heading syntax to each existing title: File tasks, Guardrails
tasks, Inference provider tasks, Secret tasks, and Workspace tasks.

Source: Linters/SAST tools


7-14: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Pass params as a JSON string.

nemo_api in agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py declares params: str | None and calls json.loads(params). These examples pass JSON objects. The file operations can fail before the SDK call. Quote the JSON payload in every example.

Proposed correction
-  - params: `{"content": "text", "remote_path": "verify.txt", "fileset": "harbor-final-fileset"}`
+  - params: `'{"content":"text","remote_path":"verify.txt","fileset":"harbor-final-fileset"}'`

-1) `nemo_api(resource="files.filesets", action="create", params={"name":"harbor-test-fileset","description":"Test fileset for harbor eval"})`
+1) `nemo_api(resource="files.filesets", action="create", params='{"name":"harbor-test-fileset","description":"Test fileset for harbor eval"}')`

Also applies to: 24-34

🤖 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 `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md`
around lines 7 - 14, Update the nemo_api examples for files.upload_content and
files.download_content, including the additional examples around the referenced
section, so each params value is passed as a quoted JSON string rather than an
inline JSON object. Preserve the existing payload fields and values while
matching the params: str contract in register.py.

16-18: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Clean up temporary resources after a failed step.

If a later step fails twice, the sequence stops before the cleanup step. A successful temporary fileset can remain with temp.txt. Add best-effort cleanup for resources created by this run before returning the error.

🤖 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 `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md`
around lines 16 - 18, Update the execution sequence in SKILL.md so that, when a
later step fails after two attempts, it performs best-effort cleanup of
temporary resources created during the run before returning the error. Preserve
the existing stop-after-retry behavior, and ensure cleanup failures do not
prevent returning the original error.

18-18: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Do not retry file mutations blindly.

Line 18 retries every failed step, including fileset creation and upload_content. If the first request succeeds but its response is lost, the retry can repeat the mutation. Check resource state or use idempotency before retrying writes.

🤖 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 `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md` at
line 18, Update the retry guidance in SKILL.md so failed file mutations,
including fileset creation and upload_content, are not retried blindly. Before
retrying a write operation, verify the resource state or use an idempotency
mechanism; only retry when duplication is prevented, while preserving the
existing one-retry behavior for safe steps.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 30257/38273 79.1% 63.7%
Integration Tests 17899/36942 48.4% 20.9%

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

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

Inline comments:
In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md`:
- Line 5: Update the first content heading after frontmatter in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md:5-5,
entities/SKILL.md:5-5, evaluator/SKILL.md:5-5, files/SKILL.md:5-5,
guardrails/SKILL.md:5-5, inference/SKILL.md:5-5, secrets/SKILL.md:5-5, and
workspace/SKILL.md:5-5 by prefixing each existing task title with a level-one
Markdown heading marker, preserving the respective title text and skill
definitions.

In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md`:
- Line 18: Update the failure-handling sequence in SKILL.md so that after the
retry also fails, it deletes the temporary fileset and temp.txt before returning
the error. Preserve the existing stop-sequence behavior and ensure final
creation is not attempted after cleanup.
🪄 Autofix

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: f54b7732-834c-474a-b535-1c4e5c0316ef

📥 Commits

Reviewing files that changed from the base of the PR and between 4bae0ab and 4865d92.

⛔ Files ignored due to path filters (1)
  • agents/nemo-studio-copilot/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (80)
  • agents/nemo-studio-copilot-spec/AGENT-SPEC.md
  • agents/nemo-studio-copilot/.dockerignore
  • agents/nemo-studio-copilot/Dockerfile
  • agents/nemo-studio-copilot/pyproject.toml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.json
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/.gitkeep
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.py
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
  • pyproject.toml
  • services/studio/src/nmp/studio/copilot.py
  • services/studio/src/nmp/studio/copilot_artifacts.py
  • services/studio/src/nmp/studio/copilot_mcp_tools.py
  • services/studio/src/nmp/studio/copilot_skills.py
  • services/studio/src/nmp/studio/env_mappings.py
  • services/studio/src/nmp/studio/service.py
  • services/studio/src/nmp/studio/studio_links.py
  • services/studio/tests/unit/test_copilot.py
  • services/studio/tests/unit/test_service.py
  • web/packages/studio/env/.env.dev.local.sample
  • web/packages/studio/env/.env.fastapi
  • web/packages/studio/src/components/CustomizeModelModal/constants.ts
  • web/packages/studio/src/components/ExperimentCreateModal/index.tsx
  • web/packages/studio/src/components/Layouts/GlobalNav/index.test.tsx
  • web/packages/studio/src/components/Layouts/GlobalNav/index.tsx
  • web/packages/studio/src/components/dataViews/EvaluationSessionsDataView/Empty.tsx
  • web/packages/studio/src/components/dataViews/ExperimentDataView/Empty.tsx
  • web/packages/studio/src/constants/environment.ts
  • web/packages/studio/src/constants/featureFlags/featureFlags.ts
  • web/packages/studio/src/constants/routes.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/SkillActionSection.tsx
  • web/packages/studio/src/routes/DashboardLandingRoute/index.test.tsx
  • web/packages/studio/src/routes/DashboardLandingRoute/index.tsx
  • web/packages/studio/src/routes/PageLayout/index.tsx
  • web/packages/studio/src/routes/RootRedirect/index.test.tsx
  • web/packages/studio/src/routes/WorkspaceLayout/WorkspaceSideNav.tsx
  • web/packages/studio/src/routes/agents/AgentDeploymentsListRoute/CreateDeploymentModal/index.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeLayout.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/JobProgressToolCall.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/context/ClaudeCodeChatProvider.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/HistoryPanelContents.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/SkillsPanelContents.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/helpers.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/studioUiNavigationSuggestions.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/toolParts.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/types.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.ts
  • web/packages/studio/src/routes/groups/dashboardRoutes.tsx
  • web/packages/studio/src/routes/index.test.tsx
  • web/packages/studio/src/routes/utils.ts
🚧 Files skipped from review as they are similar to previous changes (66)
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.test.ts
  • services/studio/src/nmp/studio/copilot_skills.py
  • web/packages/studio/src/constants/routes.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.test.tsx
  • pyproject.toml
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/helpers.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/SkillActionSection.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/context/ClaudeCodeChatProvider.tsx
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.yml
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/SkillsPanelContents.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/HistoryPanelContents.tsx
  • web/packages/studio/src/components/CustomizeModelModal/constants.ts
  • web/packages/studio/src/components/dataViews/EvaluationSessionsDataView/Empty.tsx
  • web/packages/studio/src/routes/DashboardLandingRoute/index.tsx
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.yml
  • web/packages/studio/src/components/dataViews/ExperimentDataView/Empty.tsx
  • web/packages/studio/src/constants/environment.ts
  • agents/nemo-studio-copilot/.dockerignore
  • web/packages/studio/src/routes/DashboardLandingRoute/index.test.tsx
  • services/studio/tests/unit/test_service.py
  • web/packages/studio/env/.env.fastapi
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.tsx
  • web/packages/studio/src/routes/RootRedirect/index.test.tsx
  • web/packages/studio/src/components/Layouts/GlobalNav/index.test.tsx
  • web/packages/studio/src/routes/WorkspaceLayout/WorkspaceSideNav.tsx
  • web/packages/studio/src/routes/agents/AgentDeploymentsListRoute/CreateDeploymentModal/index.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.tsx
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.yml
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/types.ts
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/benchmark-execution/SKILL.md
  • services/studio/src/nmp/studio/copilot_artifacts.py
  • services/studio/src/nmp/studio/env_mappings.py
  • services/studio/src/nmp/studio/service.py
  • web/packages/studio/src/components/ExperimentCreateModal/index.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.ts
  • agents/nemo-studio-copilot/pyproject.toml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.json
  • web/packages/studio/src/routes/groups/dashboardRoutes.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.test.ts
  • web/packages/studio/src/constants/featureFlags/featureFlags.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.test.tsx
  • web/packages/studio/src/routes/index.test.tsx
  • web/packages/studio/src/components/Layouts/GlobalNav/index.tsx
  • services/studio/src/nmp/studio/studio_links.py
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeLayout.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/JobProgressToolCall.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/toolParts.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.tsx
  • agents/nemo-studio-copilot/Dockerfile
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.tsx
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/studioUiNavigationSuggestions.test.ts
  • web/packages/studio/src/routes/PageLayout/index.tsx
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
  • services/studio/src/nmp/studio/copilot_mcp_tools.py
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.test.tsx
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.py
  • web/packages/studio/src/routes/utils.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

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

Actionable comments posted: 2

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

Inline comments:
In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md`:
- Line 5: Update the first content heading after frontmatter in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md:5-5,
entities/SKILL.md:5-5, evaluator/SKILL.md:5-5, files/SKILL.md:5-5,
guardrails/SKILL.md:5-5, inference/SKILL.md:5-5, secrets/SKILL.md:5-5, and
workspace/SKILL.md:5-5 by prefixing each existing task title with a level-one
Markdown heading marker, preserving the respective title text and skill
definitions.

In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md`:
- Line 18: Update the failure-handling sequence in SKILL.md so that after the
retry also fails, it deletes the temporary fileset and temp.txt before returning
the error. Preserve the existing stop-sequence behavior and ensure final
creation is not attempted after cleanup.
🪄 Autofix

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: f54b7732-834c-474a-b535-1c4e5c0316ef

📥 Commits

Reviewing files that changed from the base of the PR and between 4bae0ab and 4865d92.

⛔ Files ignored due to path filters (1)
  • agents/nemo-studio-copilot/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (80)
  • agents/nemo-studio-copilot-spec/AGENT-SPEC.md
  • agents/nemo-studio-copilot/.dockerignore
  • agents/nemo-studio-copilot/Dockerfile
  • agents/nemo-studio-copilot/pyproject.toml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.json
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/.gitkeep
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.py
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
  • pyproject.toml
  • services/studio/src/nmp/studio/copilot.py
  • services/studio/src/nmp/studio/copilot_artifacts.py
  • services/studio/src/nmp/studio/copilot_mcp_tools.py
  • services/studio/src/nmp/studio/copilot_skills.py
  • services/studio/src/nmp/studio/env_mappings.py
  • services/studio/src/nmp/studio/service.py
  • services/studio/src/nmp/studio/studio_links.py
  • services/studio/tests/unit/test_copilot.py
  • services/studio/tests/unit/test_service.py
  • web/packages/studio/env/.env.dev.local.sample
  • web/packages/studio/env/.env.fastapi
  • web/packages/studio/src/components/CustomizeModelModal/constants.ts
  • web/packages/studio/src/components/ExperimentCreateModal/index.tsx
  • web/packages/studio/src/components/Layouts/GlobalNav/index.test.tsx
  • web/packages/studio/src/components/Layouts/GlobalNav/index.tsx
  • web/packages/studio/src/components/dataViews/EvaluationSessionsDataView/Empty.tsx
  • web/packages/studio/src/components/dataViews/ExperimentDataView/Empty.tsx
  • web/packages/studio/src/constants/environment.ts
  • web/packages/studio/src/constants/featureFlags/featureFlags.ts
  • web/packages/studio/src/constants/routes.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/SkillActionSection.tsx
  • web/packages/studio/src/routes/DashboardLandingRoute/index.test.tsx
  • web/packages/studio/src/routes/DashboardLandingRoute/index.tsx
  • web/packages/studio/src/routes/PageLayout/index.tsx
  • web/packages/studio/src/routes/RootRedirect/index.test.tsx
  • web/packages/studio/src/routes/WorkspaceLayout/WorkspaceSideNav.tsx
  • web/packages/studio/src/routes/agents/AgentDeploymentsListRoute/CreateDeploymentModal/index.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeLayout.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/JobProgressToolCall.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/context/ClaudeCodeChatProvider.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/HistoryPanelContents.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/SkillsPanelContents.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/helpers.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/studioUiNavigationSuggestions.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/toolParts.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/types.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.ts
  • web/packages/studio/src/routes/groups/dashboardRoutes.tsx
  • web/packages/studio/src/routes/index.test.tsx
  • web/packages/studio/src/routes/utils.ts
🚧 Files skipped from review as they are similar to previous changes (66)
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.test.ts
  • services/studio/src/nmp/studio/copilot_skills.py
  • web/packages/studio/src/constants/routes.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.test.tsx
  • pyproject.toml
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/helpers.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/SkillActionSection.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/context/ClaudeCodeChatProvider.tsx
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.yml
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/SkillsPanelContents.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/HistoryPanelContents.tsx
  • web/packages/studio/src/components/CustomizeModelModal/constants.ts
  • web/packages/studio/src/components/dataViews/EvaluationSessionsDataView/Empty.tsx
  • web/packages/studio/src/routes/DashboardLandingRoute/index.tsx
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.yml
  • web/packages/studio/src/components/dataViews/ExperimentDataView/Empty.tsx
  • web/packages/studio/src/constants/environment.ts
  • agents/nemo-studio-copilot/.dockerignore
  • web/packages/studio/src/routes/DashboardLandingRoute/index.test.tsx
  • services/studio/tests/unit/test_service.py
  • web/packages/studio/env/.env.fastapi
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.tsx
  • web/packages/studio/src/routes/RootRedirect/index.test.tsx
  • web/packages/studio/src/components/Layouts/GlobalNav/index.test.tsx
  • web/packages/studio/src/routes/WorkspaceLayout/WorkspaceSideNav.tsx
  • web/packages/studio/src/routes/agents/AgentDeploymentsListRoute/CreateDeploymentModal/index.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.tsx
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.yml
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/types.ts
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/benchmark-execution/SKILL.md
  • services/studio/src/nmp/studio/copilot_artifacts.py
  • services/studio/src/nmp/studio/env_mappings.py
  • services/studio/src/nmp/studio/service.py
  • web/packages/studio/src/components/ExperimentCreateModal/index.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.ts
  • agents/nemo-studio-copilot/pyproject.toml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.json
  • web/packages/studio/src/routes/groups/dashboardRoutes.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.test.ts
  • web/packages/studio/src/constants/featureFlags/featureFlags.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.test.tsx
  • web/packages/studio/src/routes/index.test.tsx
  • web/packages/studio/src/components/Layouts/GlobalNav/index.tsx
  • services/studio/src/nmp/studio/studio_links.py
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeLayout.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/JobProgressToolCall.test.tsx
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/toolParts.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.test.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.tsx
  • agents/nemo-studio-copilot/Dockerfile
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.tsx
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/studioUiNavigationSuggestions.test.ts
  • web/packages/studio/src/routes/PageLayout/index.tsx
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
  • services/studio/src/nmp/studio/copilot_mcp_tools.py
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.ts
  • web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.test.tsx
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.py
  • web/packages/studio/src/routes/utils.ts
🛑 Comments failed to post (2)
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md (1)

5-5: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a level-one heading to each skill file.

markdownlint-cli2 reports MD041 because the first content line after frontmatter is plain text.

  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md#L5-L5: change Auditor tasks to # Auditor tasks.
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.md#L5-L5: change Entity tasks to # Entity tasks.
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md#L5-L5: change Evaluator tasks to # Evaluator tasks.
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md#L5-L5: change File tasks to # File tasks.
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md#L5-L5: change Guardrails tasks to # Guardrails tasks.
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md#L5-L5: change Inference provider tasks to # Inference provider tasks.
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md#L5-L5: change Secret tasks to # Secret tasks.
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md#L5-L5: change Workspace tasks to # Workspace tasks.

Based on learnings, these remain agent skill definitions; the headings only satisfy the Markdown lint rule.

🧰 Tools
🪛 markdownlint-cli2 (0.23.1)

[warning] 5-5: First line in a file should be a top-level heading

(MD041, first-line-heading, first-line-h1)

📍 Affects 8 files
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md#L5-L5 (this comment)
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.md#L5-L5
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md#L5-L5
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md#L5-L5
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md#L5-L5
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md#L5-L5
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md#L5-L5
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md#L5-L5
🤖 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 `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md`
at line 5, Update the first content heading after frontmatter in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.md:5-5,
entities/SKILL.md:5-5, evaluator/SKILL.md:5-5, files/SKILL.md:5-5,
guardrails/SKILL.md:5-5, inference/SKILL.md:5-5, secrets/SKILL.md:5-5, and
workspace/SKILL.md:5-5 by prefixing each existing task title with a level-one
Markdown heading marker, preserving the respective title text and skill
definitions.

Sources: Learnings, Linters/SAST tools

agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md (1)

18-18: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Clean up temporary resources after an unrecoverable failure.

Line 18 returns after the second failed retry. The temporary fileset from Line 26 can remain, along with temp.txt. Delete temporary resources before returning the error. Do not continue to final creation.

🤖 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 `@agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md` at
line 18, Update the failure-handling sequence in SKILL.md so that after the
retry also fails, it deletes the temporary fileset and temp.txt before returning
the error. Preserve the existing stop-sequence behavior and ensure final
creation is not attempted after cleanup.

Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py (1)

54-54: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Authorization Bypass (CWE-862): Missing Authorization

Reachability: External · Exploitability: Difficult

Enforce authorization on the public MCP callback.

The route is mounted without authentication and checks only UUID syntax. Require session ownership and workspace binding, or use an equivalent signed session-scoped capability, before processing tools/call.

🤖 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 `@agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py` at line 54,
Update the public MCP callback route using STUDIO_CALLBACK_PATH to enforce
authorization before processing tools/call: validate that the session belongs to
the authenticated caller and requested workspace, or verify an equivalent signed
session-scoped capability. Do not rely solely on UUID syntax; reject
unauthorized or mismatched sessions before invoking any MCP operation.
🤖 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 `@agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py`:
- Around line 83-92: Update the resource-resolution logic around the
resource-pattern list so it identifies the requested target resource from
request context instead of applying one fixed precedence order. Ensure phrases
such as “list models for provider X” resolve to models and “list workspaces
containing models” resolve to workspaces, adding contextual disambiguation
before the existing matching loop.

---

Outside diff comments:
In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py`:
- Line 54: Update the public MCP callback route using STUDIO_CALLBACK_PATH to
enforce authorization before processing tools/call: validate that the session
belongs to the authenticated caller and requested workspace, or verify an
equivalent signed session-scoped capability. Do not rely solely on UUID syntax;
reject unauthorized or mismatched sessions before invoking any MCP operation.
🪄 Autofix

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: c1df1273-0de5-43f9-8a85-f7d3b611e463

📥 Commits

Reviewing files that changed from the base of the PR and between 4865d92 and 0ee0f52.

📒 Files selected for processing (3)
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
  • packages/nmp_platform/config/local.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py

Comment thread agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>
Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>
@dmariali
dmariali added this pull request to the merge queue Aug 4, 2026
Merged via the queue into main with commit 38cbd37 Aug 4, 2026
54 checks passed
@dmariali
dmariali deleted the rename-coding-agent branch August 4, 2026 17:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants