chore(studio): rename coding agent to Nemo Copilot - #1068
Conversation
Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>
4bae0ab to
4865d92
Compare
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (2)
📝 WalkthroughWalkthroughThe 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. ChangesNeMo Copilot rebrand
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
Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
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 winExercise
copilot_modelparsing in this fixture.The response has no
chat_artifacts, so this assertion only checks the empty default. It would pass ifcopilot_modelparsing were broken. Add a populatedchat_artifactsobject 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
⛔ Files ignored due to path filters (1)
agents/nemo-studio-copilot/uv.lockis excluded by!**/*.lock
📒 Files selected for processing (80)
agents/nemo-studio-copilot-spec/AGENT-SPEC.mdagents/nemo-studio-copilot/.dockerignoreagents/nemo-studio-copilot/Dockerfileagents/nemo-studio-copilot/pyproject.tomlagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.jsonagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.ymlagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.ymlagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.ymlagents/nemo-studio-copilot/src/nemo_studio_copilot/register.pyagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/.gitkeepagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/benchmark-execution/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.pyagents/nemo-studio-copilot/tests/smoke_test.mdagents/nemo-studio-copilot/tests/test_nemo_studio_copilot.pypyproject.tomlservices/studio/src/nmp/studio/copilot.pyservices/studio/src/nmp/studio/copilot_artifacts.pyservices/studio/src/nmp/studio/copilot_mcp_tools.pyservices/studio/src/nmp/studio/copilot_skills.pyservices/studio/src/nmp/studio/env_mappings.pyservices/studio/src/nmp/studio/service.pyservices/studio/src/nmp/studio/studio_links.pyservices/studio/tests/unit/test_copilot.pyservices/studio/tests/unit/test_service.pyweb/packages/studio/env/.env.dev.local.sampleweb/packages/studio/env/.env.fastapiweb/packages/studio/src/components/CustomizeModelModal/constants.tsweb/packages/studio/src/components/ExperimentCreateModal/index.tsxweb/packages/studio/src/components/Layouts/GlobalNav/index.test.tsxweb/packages/studio/src/components/Layouts/GlobalNav/index.tsxweb/packages/studio/src/components/dataViews/EvaluationSessionsDataView/Empty.tsxweb/packages/studio/src/components/dataViews/ExperimentDataView/Empty.tsxweb/packages/studio/src/constants/environment.tsweb/packages/studio/src/constants/featureFlags/featureFlags.tsweb/packages/studio/src/constants/routes.tsweb/packages/studio/src/routes/DashboardLandingRoute/SkillActionSection.tsxweb/packages/studio/src/routes/DashboardLandingRoute/index.test.tsxweb/packages/studio/src/routes/DashboardLandingRoute/index.tsxweb/packages/studio/src/routes/PageLayout/index.tsxweb/packages/studio/src/routes/RootRedirect/index.test.tsxweb/packages/studio/src/routes/WorkspaceLayout/WorkspaceSideNav.tsxweb/packages/studio/src/routes/agents/AgentDeploymentsListRoute/CreateDeploymentModal/index.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeLayout.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/JobProgressToolCall.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/context/ClaudeCodeChatProvider.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/HistoryPanelContents.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/SkillsPanelContents.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/helpers.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/studioUiNavigationSuggestions.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/toolParts.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/types.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.tsweb/packages/studio/src/routes/groups/dashboardRoutes.tsxweb/packages/studio/src/routes/index.test.tsxweb/packages/studio/src/routes/utils.ts
There was a problem hiding this comment.
Caution
Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.
Actionable comments posted: 10
🧹 Nitpick comments (1)
web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.ts (1)
544-544: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick winExercise
copilot_modelparsing in this fixture.The response has no
chat_artifacts, so this assertion only checks the empty default. It would pass ifcopilot_modelparsing were broken. Add a populatedchat_artifactsobject 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
⛔ Files ignored due to path filters (1)
agents/nemo-studio-copilot/uv.lockis excluded by!**/*.lock
📒 Files selected for processing (80)
agents/nemo-studio-copilot-spec/AGENT-SPEC.mdagents/nemo-studio-copilot/.dockerignoreagents/nemo-studio-copilot/Dockerfileagents/nemo-studio-copilot/pyproject.tomlagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.jsonagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.ymlagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.ymlagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.ymlagents/nemo-studio-copilot/src/nemo_studio_copilot/register.pyagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/.gitkeepagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/benchmark-execution/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.pyagents/nemo-studio-copilot/tests/smoke_test.mdagents/nemo-studio-copilot/tests/test_nemo_studio_copilot.pypyproject.tomlservices/studio/src/nmp/studio/copilot.pyservices/studio/src/nmp/studio/copilot_artifacts.pyservices/studio/src/nmp/studio/copilot_mcp_tools.pyservices/studio/src/nmp/studio/copilot_skills.pyservices/studio/src/nmp/studio/env_mappings.pyservices/studio/src/nmp/studio/service.pyservices/studio/src/nmp/studio/studio_links.pyservices/studio/tests/unit/test_copilot.pyservices/studio/tests/unit/test_service.pyweb/packages/studio/env/.env.dev.local.sampleweb/packages/studio/env/.env.fastapiweb/packages/studio/src/components/CustomizeModelModal/constants.tsweb/packages/studio/src/components/ExperimentCreateModal/index.tsxweb/packages/studio/src/components/Layouts/GlobalNav/index.test.tsxweb/packages/studio/src/components/Layouts/GlobalNav/index.tsxweb/packages/studio/src/components/dataViews/EvaluationSessionsDataView/Empty.tsxweb/packages/studio/src/components/dataViews/ExperimentDataView/Empty.tsxweb/packages/studio/src/constants/environment.tsweb/packages/studio/src/constants/featureFlags/featureFlags.tsweb/packages/studio/src/constants/routes.tsweb/packages/studio/src/routes/DashboardLandingRoute/SkillActionSection.tsxweb/packages/studio/src/routes/DashboardLandingRoute/index.test.tsxweb/packages/studio/src/routes/DashboardLandingRoute/index.tsxweb/packages/studio/src/routes/PageLayout/index.tsxweb/packages/studio/src/routes/RootRedirect/index.test.tsxweb/packages/studio/src/routes/WorkspaceLayout/WorkspaceSideNav.tsxweb/packages/studio/src/routes/agents/AgentDeploymentsListRoute/CreateDeploymentModal/index.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeLayout.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/JobProgressToolCall.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/context/ClaudeCodeChatProvider.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/HistoryPanelContents.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/SkillsPanelContents.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/helpers.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/studioUiNavigationSuggestions.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/toolParts.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/types.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.tsweb/packages/studio/src/routes/groups/dashboardRoutes.tsxweb/packages/studio/src/routes/index.test.tsxweb/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.pyRepository: 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.pyRepository: 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) ]}) PYRepository: NVIDIA-NeMo/nemo-platform
Length of output: 39138
Handle multi-resource list requests.
This input matches both
modelsandinference.providers, but the fast path selectsmodelsfirst 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-cli2reports 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: changeAuditor tasksto# Auditor tasks.agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.md#L5-L5: changeEntity tasksto# Entity tasks.agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md#L5-L5: changeEvaluator tasksto# 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-L5agents/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-cli2reports MD041 at Line 5 in all five files.
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md#L5-L5: changeFile tasksto# File tasks.agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md#L5-L5: changeGuardrails tasksto# Guardrails tasks.agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md#L5-L5: changeInference provider tasksto# Inference provider tasks.agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md#L5-L5: changeSecret tasksto# Secret tasks.agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md#L5-L5: changeWorkspace tasksto# 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-L5agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md#L5-L5agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md#L5-L5agents/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
paramsas a JSON string.
nemo_apiinagents/nemo-studio-copilot/src/nemo_studio_copilot/register.pydeclaresparams: str | Noneand callsjson.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.
|
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@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
⛔ Files ignored due to path filters (1)
agents/nemo-studio-copilot/uv.lockis excluded by!**/*.lock
📒 Files selected for processing (80)
agents/nemo-studio-copilot-spec/AGENT-SPEC.mdagents/nemo-studio-copilot/.dockerignoreagents/nemo-studio-copilot/Dockerfileagents/nemo-studio-copilot/pyproject.tomlagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.jsonagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.ymlagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.ymlagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.ymlagents/nemo-studio-copilot/src/nemo_studio_copilot/register.pyagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/.gitkeepagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/benchmark-execution/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.pyagents/nemo-studio-copilot/tests/smoke_test.mdagents/nemo-studio-copilot/tests/test_nemo_studio_copilot.pypyproject.tomlservices/studio/src/nmp/studio/copilot.pyservices/studio/src/nmp/studio/copilot_artifacts.pyservices/studio/src/nmp/studio/copilot_mcp_tools.pyservices/studio/src/nmp/studio/copilot_skills.pyservices/studio/src/nmp/studio/env_mappings.pyservices/studio/src/nmp/studio/service.pyservices/studio/src/nmp/studio/studio_links.pyservices/studio/tests/unit/test_copilot.pyservices/studio/tests/unit/test_service.pyweb/packages/studio/env/.env.dev.local.sampleweb/packages/studio/env/.env.fastapiweb/packages/studio/src/components/CustomizeModelModal/constants.tsweb/packages/studio/src/components/ExperimentCreateModal/index.tsxweb/packages/studio/src/components/Layouts/GlobalNav/index.test.tsxweb/packages/studio/src/components/Layouts/GlobalNav/index.tsxweb/packages/studio/src/components/dataViews/EvaluationSessionsDataView/Empty.tsxweb/packages/studio/src/components/dataViews/ExperimentDataView/Empty.tsxweb/packages/studio/src/constants/environment.tsweb/packages/studio/src/constants/featureFlags/featureFlags.tsweb/packages/studio/src/constants/routes.tsweb/packages/studio/src/routes/DashboardLandingRoute/SkillActionSection.tsxweb/packages/studio/src/routes/DashboardLandingRoute/index.test.tsxweb/packages/studio/src/routes/DashboardLandingRoute/index.tsxweb/packages/studio/src/routes/PageLayout/index.tsxweb/packages/studio/src/routes/RootRedirect/index.test.tsxweb/packages/studio/src/routes/WorkspaceLayout/WorkspaceSideNav.tsxweb/packages/studio/src/routes/agents/AgentDeploymentsListRoute/CreateDeploymentModal/index.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeLayout.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/JobProgressToolCall.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/context/ClaudeCodeChatProvider.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/HistoryPanelContents.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/SkillsPanelContents.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/helpers.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/studioUiNavigationSuggestions.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/toolParts.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/types.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.tsweb/packages/studio/src/routes/groups/dashboardRoutes.tsxweb/packages/studio/src/routes/index.test.tsxweb/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
There was a problem hiding this comment.
Caution
Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@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
⛔ Files ignored due to path filters (1)
agents/nemo-studio-copilot/uv.lockis excluded by!**/*.lock
📒 Files selected for processing (80)
agents/nemo-studio-copilot-spec/AGENT-SPEC.mdagents/nemo-studio-copilot/.dockerignoreagents/nemo-studio-copilot/Dockerfileagents/nemo-studio-copilot/pyproject.tomlagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval-data.jsonagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.ymlagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.ymlagents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.ymlagents/nemo-studio-copilot/src/nemo_studio_copilot/register.pyagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/.gitkeepagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/auditor/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/benchmark-execution/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.mdagents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.pyagents/nemo-studio-copilot/tests/smoke_test.mdagents/nemo-studio-copilot/tests/test_nemo_studio_copilot.pypyproject.tomlservices/studio/src/nmp/studio/copilot.pyservices/studio/src/nmp/studio/copilot_artifacts.pyservices/studio/src/nmp/studio/copilot_mcp_tools.pyservices/studio/src/nmp/studio/copilot_skills.pyservices/studio/src/nmp/studio/env_mappings.pyservices/studio/src/nmp/studio/service.pyservices/studio/src/nmp/studio/studio_links.pyservices/studio/tests/unit/test_copilot.pyservices/studio/tests/unit/test_service.pyweb/packages/studio/env/.env.dev.local.sampleweb/packages/studio/env/.env.fastapiweb/packages/studio/src/components/CustomizeModelModal/constants.tsweb/packages/studio/src/components/ExperimentCreateModal/index.tsxweb/packages/studio/src/components/Layouts/GlobalNav/index.test.tsxweb/packages/studio/src/components/Layouts/GlobalNav/index.tsxweb/packages/studio/src/components/dataViews/EvaluationSessionsDataView/Empty.tsxweb/packages/studio/src/components/dataViews/ExperimentDataView/Empty.tsxweb/packages/studio/src/constants/environment.tsweb/packages/studio/src/constants/featureFlags/featureFlags.tsweb/packages/studio/src/constants/routes.tsweb/packages/studio/src/routes/DashboardLandingRoute/SkillActionSection.tsxweb/packages/studio/src/routes/DashboardLandingRoute/index.test.tsxweb/packages/studio/src/routes/DashboardLandingRoute/index.tsxweb/packages/studio/src/routes/PageLayout/index.tsxweb/packages/studio/src/routes/RootRedirect/index.test.tsxweb/packages/studio/src/routes/WorkspaceLayout/WorkspaceSideNav.tsxweb/packages/studio/src/routes/agents/AgentDeploymentsListRoute/CreateDeploymentModal/index.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeHistoryPanel.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeLayout.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeTopBarChat.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/JobProgressToolCall.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/artifacts.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/context/ClaudeCodeChatProvider.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/HistoryPanelContents.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/SkillsPanelContents.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/historyPanel/helpers.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/stream.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/studioUiNavigationSuggestions.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/toolParts.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/types.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/util.tsweb/packages/studio/src/routes/groups/dashboardRoutes.tsxweb/packages/studio/src/routes/index.test.tsxweb/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-cli2reports 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: changeAuditor tasksto# Auditor tasks.agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/entities/SKILL.md#L5-L5: changeEntity tasksto# Entity tasks.agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md#L5-L5: changeEvaluator tasksto# Evaluator tasks.agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md#L5-L5: changeFile tasksto# File tasks.agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md#L5-L5: changeGuardrails tasksto# Guardrails tasks.agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md#L5-L5: changeInference provider tasksto# Inference provider tasks.agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md#L5-L5: changeSecret tasksto# Secret tasks.agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md#L5-L5: changeWorkspace tasksto# 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-L5agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md#L5-L5agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md#L5-L5agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/guardrails/SKILL.md#L5-L5agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/inference/SKILL.md#L5-L5agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/secrets/SKILL.md#L5-L5agents/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.
There was a problem hiding this comment.
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 liftAuthorization 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
📒 Files selected for processing (3)
agents/nemo-studio-copilot/src/nemo_studio_copilot/register.pyagents/nemo-studio-copilot/tests/test_nemo_studio_copilot.pypackages/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
Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>
Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>
Summary by CodeRabbit
New Features
Updates