Skip to content

chore(studio): Rename copilot to assistant - #1258

Open
dmariali wants to merge 3 commits into
mainfrom
rename-copilot-to-assistant
Open

chore(studio): Rename copilot to assistant#1258
dmariali wants to merge 3 commits into
mainfrom
rename-copilot-to-assistant

Conversation

@dmariali

@dmariali dmariali commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • New Features

    • Introduced NeMo Studio Assistant as the renamed chat experience across Studio.
    • Added Assistant skills for workspaces, files, entities, secrets, inference, evaluations, guardrails, and auditing.
    • Added navigation suggestions for common Studio tasks.
    • Added evaluation cases for workspace and model/provider discovery.
  • Improvements

    • Added Assistant feature-flag support while retaining legacy Copilot compatibility.
    • Improved chat history, artifacts, streaming, tool-call displays, approvals, and session handling.
  • Documentation & Testing

    • Added a comprehensive Assistant smoke-test guide and expanded validation coverage.

Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>
Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>
@dmariali
dmariali requested review from a team as code owners August 12, 2026 17:21
@dmariali dmariali changed the title Rename copilot to assistant chore(studio): Rename copilot to assistant Aug 12, 2026
@github-actions github-actions Bot added the chore label Aug 12, 2026
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 8fb05096-9c34-4502-b053-28b74b4d6fa3

📥 Commits

Reviewing files that changed from the base of the PR and between d4b8171 and 1b9fcd0.

⛔ Files ignored due to path filters (1)
  • agents/nemo-studio-assistant/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (148)
  • agents/nemo-studio-assistant-spec/AGENT-SPEC.md
  • agents/nemo-studio-assistant-spec/agent.yaml
  • agents/nemo-studio-assistant-spec/skills/auditor/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/entities/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/evaluator/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/files/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/guardrails/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/inference/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/secrets/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/workspace/SKILL.md
  • agents/nemo-studio-assistant/.dockerignore
  • agents/nemo-studio-assistant/Dockerfile.fabric-local
  • agents/nemo-studio-assistant/agent.yaml
  • agents/nemo-studio-assistant/constraints.fabric-local.txt
  • agents/nemo-studio-assistant/pyproject.toml
  • agents/nemo-studio-assistant/skills/auditor/SKILL.md
  • agents/nemo-studio-assistant/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-assistant/skills/entities/SKILL.md
  • agents/nemo-studio-assistant/skills/evaluator/SKILL.md
  • agents/nemo-studio-assistant/skills/files/SKILL.md
  • agents/nemo-studio-assistant/skills/guardrails/SKILL.md
  • agents/nemo-studio-assistant/skills/inference/SKILL.md
  • agents/nemo-studio-assistant/skills/secrets/SKILL.md
  • agents/nemo-studio-assistant/skills/workspace/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/mcp_server.py
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/nemo-studio-assistant-eval-data.json
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/register.py
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/.gitkeep
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/auditor/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/entities/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/evaluator/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/files/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/guardrails/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/inference/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/secrets/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/workspace/SKILL.md
  • agents/nemo-studio-assistant/tests/smoke_test.md
  • agents/nemo-studio-assistant/tests/test_nemo_studio_assistant.py
  • agents/nemo-studio-assistant/wheelhouse/nemo_platform-0.3.0.post217.dev0+b6f22880a-py3-none-any.whl
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • docs/about/release-notes/current-release.mdx
  • packages/nmp_platform/config/local.yaml
  • pyproject.toml
  • pytest.ini
  • services/studio/src/nmp/studio/assistant.py
  • services/studio/src/nmp/studio/assistant_artifacts.py
  • services/studio/src/nmp/studio/assistant_mcp_tools.py
  • services/studio/src/nmp/studio/assistant_skills.py
  • services/studio/src/nmp/studio/entities.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_assistant.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/mocks/studio-ui/chip/constants.ts
  • web/packages/studio/src/mocks/studio-ui/chip/tools.json
  • 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/DashboardLandingRoute/skillActionSuggestions.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/skillActionTemplates.test.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/skillDisplayName.test.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/skillDisplayName.ts
  • 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/AssistantChatRoute/AssistantChatThread.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantChatThread.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantHistoryPanel.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantHistoryPanel.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantLayout.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLinkTarget.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantToolCallPart.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantToolCallPart.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantTopBarChat.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantTopBarChat.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/BlockingInputComposer.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/BlockingInputComposer.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/ChatThreadErrorBoundary.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/ChatThreadErrorBoundary.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/JobProgressToolCall.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/JobProgressToolCall.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/activeSessionStorage.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/api.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/api.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/artifacts.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/artifacts.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/blockingInputRequest.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/context/AssistantChatProvider.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/context/AssistantChatProvider.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/context/useAssistantChatContext.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/ArtifactSections.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/AssistantArtifactsPane.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/FloatingPanel.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/HistoryPanelContents.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/HistoryPanelSkeletons.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/HistorySessionButton.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/SkillCard.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/SkillsPanelContents.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/helpers.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/helpers.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/types.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/index.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/index.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/jobProgressConsts.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/stream.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/stream.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/studioUiNavigationSuggestions.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/studioUiNavigationSuggestions.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/CollapsedThinkingToolCall.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/FileChangeToolCallCard.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/SubtleToolCallRow.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/constants.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/helpers.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/types.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolParts.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolParts.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/types.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/useAssistantChatRuntime.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/useAssistantChatRuntime.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/useCustomAssistantChatRuntime.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/useCustomAssistantChatRuntime.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/util.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/util.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/utils/jobProgress.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/utils/jobProgress.ts
  • web/packages/studio/src/routes/agents/CopilotChatRoute/context/useCopilotChatContext.ts
  • web/packages/studio/src/routes/agents/CopilotChatRoute/types.ts
  • web/packages/studio/src/routes/groups/dashboardRoutes.tsx
  • web/packages/studio/src/routes/index.test.tsx
  • web/packages/studio/src/routes/utils.ts
  • web/packages/studio/src/util/localStorage.ts
💤 Files with no reviewable changes (4)
  • agents/nemo-studio-assistant/.dockerignore
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • web/packages/studio/src/routes/agents/CopilotChatRoute/context/useCopilotChatContext.ts
  • web/packages/studio/src/routes/agents/CopilotChatRoute/types.ts

📝 Walkthrough

Walkthrough

This change renames the packaged agent and Studio chat surface from NeMo Studio Copilot to NeMo Studio Assistant. It updates agent packaging, backend routes, persisted entities, feature flags, web chat modules, skill documents, tests, and release notes.

Changes

NeMo Studio Assistant migration

Layer / File(s) Summary
Agent spec and packaging rename
agents/nemo-studio-assistant-spec/*, agents/nemo-studio-assistant/agent.yaml, agents/nemo-studio-assistant/pyproject.toml, agents/nemo-studio-assistant/src/nemo_studio_assistant/*, pytest.ini, pyproject.toml
Agent metadata, CLI names, module paths, MCP callback path, image labels, telemetry names, eval data, and local test paths now use nemo-studio-assistant. The agent spec also adds Assistant skill playbooks and Assistant smoke-test documentation.
Studio backend Assistant bridge
services/studio/src/nmp/studio/assistant.py, .../assistant_artifacts.py, .../assistant_mcp_tools.py, .../entities.py, .../service.py, .../studio_links.py, .../env_mappings.py, services/studio/tests/unit/*
The Studio bridge now uses Assistant naming for routes, helpers, persistence, MCP context, event identifiers, artifact model fields, and deployed-agent calls. Persisted conversations use AssistantConversation, and tests now target the Assistant bridge and Assistant endpoints.
Studio web chat route and runtime migration
web/packages/studio/src/routes/agents/AssistantChatRoute/*, web/packages/studio/src/util/localStorage.ts, web/packages/studio/src/routes/utils.ts
The web chat stack now uses Assistant types, APIs, context, runtime hooks, artifacts, history handling, tool rendering, storage keys, and route helpers. New Assistant route support also adds internal Studio link resolution and prompt-based UI navigation suggestions.
Feature flags, navigation, and UI text
web/packages/studio/env/*, web/packages/studio/src/constants/*, web/packages/studio/src/components/..., web/packages/studio/src/routes/DashboardLandingRoute/*, web/packages/studio/src/routes/groups/dashboardRoutes.tsx, packages/nmp_platform/config/local.yaml, docs/about/release-notes/current-release.mdx
Feature-flag names, route properties, dashboard gating, layout wiring, navigation, empty states, modal labels, mock tool contexts, deployment test fixtures, and release notes now use Assistant naming. The web app enables Assistant Studio when either the assistant or legacy copilot flag is enabled.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 18.95% 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 and concisely summarizes the primary change: renaming Studio Copilot to Assistant.
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 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch rename-copilot-to-assistant

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

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 32013/40717 78.6% 63.4%
Integration Tests 18574/38643 48.1% 20.8%

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

Caution

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

⚠️ Outside diff range comments (2)
web/packages/studio/src/routes/agents/AssistantChatRoute/useAssistantChatRuntime.ts (1)

695-708: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Prevent stale permission results from writing into another session.

If resolveAssistantPermission completes after loadSession, Line 703 appends denial text to the newly loaded session. resolveInputRequest already guards this case at Lines 650-655. Capture the session and request IDs before the await. Ignore stale completions before appendUserMessage and state updates. Add a matching stale-permission test.

🤖 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/AssistantChatRoute/useAssistantChatRuntime.ts`
around lines 695 - 708, Update the permission-resolution flow in
resolveAssistantPermission to capture the current sessionId and
activePermission.requestId before awaiting completion, then ignore the result if
either identifier no longer matches the active session or permission request.
Apply this stale-result guard before appendUserMessage and dispatchBlocking, and
add a test covering completion after loadSession to ensure the newly loaded
session is unchanged.
services/studio/src/nmp/studio/assistant.py (1)

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

Preserve legacy Copilot conversation history.

The rename changed the entity type from copilot_conversation to assistant_conversation and the name from copilot-{session_id} to assistant-{session_id}. Add a migration or compatibility reads before rollout.

🤖 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 `@services/studio/src/nmp/studio/assistant.py` around lines 864 - 894, Update
the session-history loading flow around AssistantConversation and
_conversation_name to preserve legacy Copilot history: when the assistant entity
lookup finds nothing, also read the legacy copilot_conversation entity using the
copilot-{session_id} naming convention, while retaining ownership validation and
response mapping. Prefer a migration if the existing persistence APIs support
it; otherwise implement compatibility reads before rollout.
🧹 Nitpick comments (6)
web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantChatThread.tsx (2)

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

Use import type for type-only imports.

Move AgentBlockingInputSubmission, AgentDecisionChoice, and FC to import type declarations.

Proposed change
-import { type AgentBlockingInputSubmission } from '`@studio/components/agents/AgentBlockingInput`';
+import type { AgentBlockingInputSubmission } from '`@studio/components/agents/AgentBlockingInput`';
 import {
   AgentDecisionInput,
-  type AgentDecisionChoice,
 } from '`@studio/components/agents/AgentDecisionInput`';
+import type { AgentDecisionChoice } from '`@studio/components/agents/AgentDecisionInput`';
-import { type FC, useCallback, useLayoutEffect, useMemo, useRef } from 'react';
+import type { FC } from 'react';
+import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';

As per coding guidelines, “Use import type for type-only imports.”

🤖 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/AssistantChatRoute/AssistantChatThread.tsx`
around lines 6 - 16, Update the imports in AssistantChatThread.tsx to use import
type for the type-only symbols AgentBlockingInputSubmission,
AgentDecisionChoice, and FC, while keeping the runtime React hooks and component
imports as regular imports.

Source: Coding guidelines


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

Mark public props as readonly.

  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantChatThread.tsx#L37-L42: Mark every AssistantChatThreadProps property as readonly.
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.tsx#L11-L14: Mark every AssistantStudioLinkProps property as readonly.

As per coding guidelines, “Use readonly for immutable properties.”

🤖 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/AssistantChatRoute/AssistantChatThread.tsx`
around lines 37 - 42, Mark every property in AssistantChatThreadProps in
web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantChatThread.tsx
(lines 37-42) as readonly. Apply the same change to every property in
AssistantStudioLinkProps in
web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.tsx
(lines 11-14).

Source: Coding guidelines

web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.tsx (1)

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

Add an explicit return type.

AssistantStudioLink is a public API. Declare its React element return type.

As per coding guidelines, “Use explicit return types for public APIs and complex functions.”

🤖 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/AssistantChatRoute/AssistantStudioLink.tsx`
at line 19, Update the public AssistantStudioLink component declaration to
include an explicit React element return type, while preserving its existing
props and rendering behavior.

Source: Coding guidelines

agents/nemo-studio-assistant/tests/smoke_test.md (1)

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

Add the required runbook sections.

Before ## Static and unit validation, add ## Prerequisites with the required platform endpoint, uv, nemo, deployment access, and cleanup permissions. After the final section, add ## Next Steps with cross-links to the assistant deployment and Studio documentation.

As per coding guidelines, documentation pages must list prerequisites at the top and include a Next Steps section with cross-links.

Also applies to: 76-82

🤖 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-assistant/tests/smoke_test.md` around lines 7 - 17, Add a
top-level Prerequisites section before Static and unit validation, documenting
the required platform endpoint, uv, nemo, deployment access, and cleanup
permissions. Append a Next Steps section after the final existing section with
cross-links to the assistant deployment and Studio documentation, keeping the
current validation commands unchanged.

Source: Coding guidelines

web/packages/studio/env/.env.dev.local.sample (1)

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

Move the key before VITE_FF_BASE_MODELS_ENABLED.

dotenv-linter reports an UnorderedKey warning for this line.

🤖 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/env/.env.dev.local.sample` at line 26, Move
VITE_FF_ASSISTANT_STUDIO_ENABLED so it appears before
VITE_FF_BASE_MODELS_ENABLED in the environment sample, preserving both keys and
their values.

Source: Linters/SAST tools

services/studio/src/nmp/studio/studio_links.py (1)

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

Consider keeping copilot as an alias.

The copilot destination key is gone, and the alias list does not include it. The code keeps the legacy copilot_studio_enabled flag at Line 421 for compatibility, so any stored or model-emitted destination="copilot" now fails to resolve. Add the alias to match the flag-level compatibility.

♻️ Proposed change
-        aliases=("claude_code", "claude_code_chat", "assistant_chat"),
+        aliases=("claude_code", "claude_code_chat", "assistant_chat", "copilot", "copilot_chat"),
🤖 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 `@services/studio/src/nmp/studio/studio_links.py` around lines 35 - 38, Add
"copilot" to the aliases tuple in the assistant StudioLinkDestination definition
so legacy destination="copilot" values resolve to the existing assistant
destination, matching the compatibility behavior of copilot_studio_enabled.
🤖 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-assistant-spec/skills/auditor/SKILL.md`:
- Around line 7-10: Update the auditor CRUD guidance for nemo_api audit.targets
and audit.configs so every create, list, retrieve, update, and delete call
passes workspace set to the active request workspace. Ensure both target and
config operations consistently include this workspace argument.

In `@agents/nemo-studio-assistant/skills/auditor/SKILL.md`:
- Line 5: Update the top-level headings in
agents/nemo-studio-assistant/skills/auditor/SKILL.md:5-5 and
agents/nemo-studio-assistant/skills/entities/SKILL.md:5-5 by prefixing “Auditor
tasks” and “Entity tasks” with a level-one Markdown heading marker,
respectively.

In `@agents/nemo-studio-assistant/skills/files/SKILL.md`:
- Around line 19-29: Update the delete workflow in the documented mutation steps
to require a scoped read-back confirming that the targeted file or fileset is
absent before proceeding to step 8 or reporting success. Keep the existing
identity scoping, and treat any result that does not confirm absence as an
unknown commit state: stop without continuing or cleanup assumptions.

In
`@agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/inference/SKILL.md`:
- Line 5: Update the task titles to Markdown H1 headings: in
agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/inference/SKILL.md:5
change “Inference provider tasks”; in
agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/secrets/SKILL.md:5
change “Secret tasks”; and in
agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/workspace/SKILL.md:5
change “Workspace tasks”.

In `@web/packages/studio/env/.env.fastapi`:
- Line 23: Update the Helm deployment configuration for
VITE_FF_ASSISTANT_STUDIO_ENABLED so the runtime mapping sets
platformConfig.studio.feature_flags.assistant_studio_enabled to true, rather
than relying on the false default when the setting is absent. Preserve the
existing local configuration behavior.

In `@web/packages/studio/src/routes/agents/AssistantChatRoute/api.ts`:
- Around line 168-178: Update the parsing logic around parseModelSource and
assistantModel to preserve legacy artifacts: accept copilot_model as a fallback
for assistant_model, treat model_source "copilot" as the assistant source, and
ensure persisted copilot-<session_id> session names remain readable or are
migrated to assistant-<session_id> before deployment.

In
`@web/packages/studio/src/routes/agents/AssistantChatRoute/studioUiNavigationSuggestions.ts`:
- Around line 210-217: Update the deploy-agent pattern in the navigation
suggestions to exclude prompts whose agent reference is followed by
code-oriented terms such as class, component, helper, test, function, or module,
matching the exclusion used by the build/create pattern. Add “Deploy an agent
component” to the ordinary-prompt test cases.

---

Outside diff comments:
In `@services/studio/src/nmp/studio/assistant.py`:
- Around line 864-894: Update the session-history loading flow around
AssistantConversation and _conversation_name to preserve legacy Copilot history:
when the assistant entity lookup finds nothing, also read the legacy
copilot_conversation entity using the copilot-{session_id} naming convention,
while retaining ownership validation and response mapping. Prefer a migration if
the existing persistence APIs support it; otherwise implement compatibility
reads before rollout.

In
`@web/packages/studio/src/routes/agents/AssistantChatRoute/useAssistantChatRuntime.ts`:
- Around line 695-708: Update the permission-resolution flow in
resolveAssistantPermission to capture the current sessionId and
activePermission.requestId before awaiting completion, then ignore the result if
either identifier no longer matches the active session or permission request.
Apply this stale-result guard before appendUserMessage and dispatchBlocking, and
add a test covering completion after loadSession to ensure the newly loaded
session is unchanged.

---

Nitpick comments:
In `@agents/nemo-studio-assistant/tests/smoke_test.md`:
- Around line 7-17: Add a top-level Prerequisites section before Static and unit
validation, documenting the required platform endpoint, uv, nemo, deployment
access, and cleanup permissions. Append a Next Steps section after the final
existing section with cross-links to the assistant deployment and Studio
documentation, keeping the current validation commands unchanged.

In `@services/studio/src/nmp/studio/studio_links.py`:
- Around line 35-38: Add "copilot" to the aliases tuple in the assistant
StudioLinkDestination definition so legacy destination="copilot" values resolve
to the existing assistant destination, matching the compatibility behavior of
copilot_studio_enabled.

In `@web/packages/studio/env/.env.dev.local.sample`:
- Line 26: Move VITE_FF_ASSISTANT_STUDIO_ENABLED so it appears before
VITE_FF_BASE_MODELS_ENABLED in the environment sample, preserving both keys and
their values.

In
`@web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantChatThread.tsx`:
- Around line 6-16: Update the imports in AssistantChatThread.tsx to use import
type for the type-only symbols AgentBlockingInputSubmission,
AgentDecisionChoice, and FC, while keeping the runtime React hooks and component
imports as regular imports.
- Around line 37-42: Mark every property in AssistantChatThreadProps in
web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantChatThread.tsx
(lines 37-42) as readonly. Apply the same change to every property in
AssistantStudioLinkProps in
web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.tsx
(lines 11-14).

In
`@web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.tsx`:
- Line 19: Update the public AssistantStudioLink component declaration to
include an explicit React element return type, while preserving its existing
props and rendering behavior.
🪄 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: 8fb05096-9c34-4502-b053-28b74b4d6fa3

📥 Commits

Reviewing files that changed from the base of the PR and between d4b8171 and 1b9fcd0.

⛔ Files ignored due to path filters (1)
  • agents/nemo-studio-assistant/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (148)
  • agents/nemo-studio-assistant-spec/AGENT-SPEC.md
  • agents/nemo-studio-assistant-spec/agent.yaml
  • agents/nemo-studio-assistant-spec/skills/auditor/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/entities/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/evaluator/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/files/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/guardrails/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/inference/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/secrets/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/workspace/SKILL.md
  • agents/nemo-studio-assistant/.dockerignore
  • agents/nemo-studio-assistant/Dockerfile.fabric-local
  • agents/nemo-studio-assistant/agent.yaml
  • agents/nemo-studio-assistant/constraints.fabric-local.txt
  • agents/nemo-studio-assistant/pyproject.toml
  • agents/nemo-studio-assistant/skills/auditor/SKILL.md
  • agents/nemo-studio-assistant/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-assistant/skills/entities/SKILL.md
  • agents/nemo-studio-assistant/skills/evaluator/SKILL.md
  • agents/nemo-studio-assistant/skills/files/SKILL.md
  • agents/nemo-studio-assistant/skills/guardrails/SKILL.md
  • agents/nemo-studio-assistant/skills/inference/SKILL.md
  • agents/nemo-studio-assistant/skills/secrets/SKILL.md
  • agents/nemo-studio-assistant/skills/workspace/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/mcp_server.py
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/nemo-studio-assistant-eval-data.json
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/register.py
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/.gitkeep
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/auditor/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/entities/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/evaluator/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/files/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/guardrails/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/inference/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/secrets/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/workspace/SKILL.md
  • agents/nemo-studio-assistant/tests/smoke_test.md
  • agents/nemo-studio-assistant/tests/test_nemo_studio_assistant.py
  • agents/nemo-studio-assistant/wheelhouse/nemo_platform-0.3.0.post217.dev0+b6f22880a-py3-none-any.whl
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • docs/about/release-notes/current-release.mdx
  • packages/nmp_platform/config/local.yaml
  • pyproject.toml
  • pytest.ini
  • services/studio/src/nmp/studio/assistant.py
  • services/studio/src/nmp/studio/assistant_artifacts.py
  • services/studio/src/nmp/studio/assistant_mcp_tools.py
  • services/studio/src/nmp/studio/assistant_skills.py
  • services/studio/src/nmp/studio/entities.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_assistant.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/mocks/studio-ui/chip/constants.ts
  • web/packages/studio/src/mocks/studio-ui/chip/tools.json
  • 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/DashboardLandingRoute/skillActionSuggestions.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/skillActionTemplates.test.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/skillDisplayName.test.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/skillDisplayName.ts
  • 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/AssistantChatRoute/AssistantChatThread.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantChatThread.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantHistoryPanel.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantHistoryPanel.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantLayout.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLinkTarget.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantToolCallPart.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantToolCallPart.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantTopBarChat.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantTopBarChat.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/BlockingInputComposer.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/BlockingInputComposer.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/ChatThreadErrorBoundary.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/ChatThreadErrorBoundary.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/JobProgressToolCall.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/JobProgressToolCall.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/activeSessionStorage.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/api.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/api.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/artifacts.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/artifacts.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/blockingInputRequest.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/context/AssistantChatProvider.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/context/AssistantChatProvider.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/context/useAssistantChatContext.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/ArtifactSections.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/AssistantArtifactsPane.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/FloatingPanel.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/HistoryPanelContents.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/HistoryPanelSkeletons.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/HistorySessionButton.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/SkillCard.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/SkillsPanelContents.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/helpers.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/helpers.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/types.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/index.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/index.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/jobProgressConsts.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/stream.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/stream.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/studioUiNavigationSuggestions.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/studioUiNavigationSuggestions.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/CollapsedThinkingToolCall.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/FileChangeToolCallCard.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/SubtleToolCallRow.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/constants.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/helpers.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/types.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolParts.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolParts.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/types.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/useAssistantChatRuntime.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/useAssistantChatRuntime.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/useCustomAssistantChatRuntime.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/useCustomAssistantChatRuntime.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/util.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/util.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/utils/jobProgress.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/utils/jobProgress.ts
  • web/packages/studio/src/routes/agents/CopilotChatRoute/context/useCopilotChatContext.ts
  • web/packages/studio/src/routes/agents/CopilotChatRoute/types.ts
  • web/packages/studio/src/routes/groups/dashboardRoutes.tsx
  • web/packages/studio/src/routes/index.test.tsx
  • web/packages/studio/src/routes/utils.ts
  • web/packages/studio/src/util/localStorage.ts
💤 Files with no reviewable changes (4)
  • agents/nemo-studio-assistant/.dockerignore
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • web/packages/studio/src/routes/agents/CopilotChatRoute/context/useCopilotChatContext.ts
  • web/packages/studio/src/routes/agents/CopilotChatRoute/types.ts

# Feature Flags (VITE_FF_* prefix)
VITE_FF_AGENTS_ENABLED=STUDIO_UI_VITE_FF_AGENTS_ENABLED
VITE_FF_ANONYMIZER_ENABLED=STUDIO_UI_VITE_FF_ANONYMIZER_ENABLED
VITE_FF_ASSISTANT_STUDIO_ENABLED=STUDIO_UI_VITE_FF_ASSISTANT_STUDIO_ENABLED

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.

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
rg -n 'ASSISTANT_STUDIO_ENABLED|COPILOT_STUDIO_ENABLED' --glob '!**/node_modules/**'

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 163


🏁 Script executed:

#!/bin/bash
set -eu
printf '%s\n' '--- candidate files ---'
git ls-files | rg -i '(^|/)(helm|charts?|values|env|deployment|config|kustomize|docker|compose)' | head -200
printf '%s\n' '--- exact environment references ---'
rg -n -i 'assistant|copilot|studio_ui_vite|vite_ff' --glob '!**/node_modules/**' --glob '!**/dist/**' --glob '!**/build/**' | head -300
printf '%s\n' '--- target file context ---'
cat -n web/packages/studio/env/.env.fastapi | sed -n '1,45p'

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 8760


🏁 Script executed:

#!/bin/bash
set -eu
printf '%s\n' '--- target directory ---'
ls -la web/packages/studio/env
printf '%s\n' '--- target file ---'
cat -n web/packages/studio/env/.env.fastapi
printf '%s\n' '--- hidden repository-wide references ---'
rg --hidden -n -i 'ASSISTANT_STUDIO_ENABLED|COPILOT_STUDIO_ENABLED|STUDIO_UI_VITE_FF|VITE_FF_ASSISTANT' \
  --glob '!**/node_modules/**' --glob '!**/dist/**' --glob '!**/build/**' \
  --glob '!.git/**' | head -400
printf '%s\n' '--- Helm values and env template references ---'
rg -n -i 'extraEnv|env:|environment|studio|vite|feature.?flag' k8s/helm/values.yaml k8s/helm/templates web --glob '!**/node_modules/**' | head -400

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 3590


🏁 Script executed:

#!/bin/bash
set -eu
printf '%s\n' '--- repository state ---'
git status --short
printf '%s\n' '--- tracked studio files ---'
git ls-files | rg '(^|/)(web|services/studio|studio)(/|$)' | head -300
printf '%s\n' '--- ignored and untracked matching files ---'
fd --hidden --no-ignore -t f '(env_mappings\.py|values.*\.ya?ml|\.env.*|studio)' . | head -400
printf '%s\n' '--- all matching text, including ignored files ---'
rg --hidden --no-ignore -n -i 'ASSISTANT_STUDIO_ENABLED|COPILOT_STUDIO_ENABLED|STUDIO_UI_VITE|VITE_FF_ASSISTANT' \
  --glob '!**/node_modules/**' --glob '!**/.git/**' | head -500

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 20771


🏁 Script executed:

#!/bin/bash
set -eu
printf '%s\n' '--- environment mapping implementation ---'
wc -l services/studio/src/nmp/studio/env_mappings.py
cat -n services/studio/src/nmp/studio/env_mappings.py | sed -n '1,260p'
printf '%s\n' '--- direct target search ---'
rg -n --no-ignore 'ASSISTANT|STUDIO_UI|VITE_FF' web/packages/studio/env/.env.fastapi services/studio/src/nmp/studio/env_mappings.py
printf '%s\n' '--- platform configuration declarations ---'
rg -n --no-ignore -i 'feature.?flag|assistant|copilot|studio_ui|env_mappings' \
  k8s/helm/values.yaml k8s/helm/templates services/studio web/packages/studio \
  --glob '!**/node_modules/**' | head -500

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 50381


🏁 Script executed:

#!/bin/bash
set -eu
printf '%s\n' '--- feature-flag configuration definitions ---'
rg -n --no-ignore -C 3 'assistant_studio_enabled|copilot_studio_enabled|feature_flags' \
  services packages k8s web/packages/studio/src web/packages/studio/env \
  --glob '!**/node_modules/**' --glob '!**/dist/**' --glob '!**/build/**' \
  --glob '*.py' --glob '*.yaml' --glob '*.yml' --glob '*.json' --glob '*.ts' --glob '*.tsx' --glob '*.env*' \
  | head -500
printf '%s\n' '--- runtime replacement call path ---'
rg -n --no-ignore -C 5 'ENV_MAPPINGS|env_replacements|replace.*marker|global_settings' \
  services/studio/src/nmp/studio \
  --glob '*.py' | head -400
printf '%s\n' '--- relevant local configuration files ---'
rg -n --no-ignore -i -C 3 'assistant|copilot|feature_flags' \
  packages/nmp_platform/config services k8s/helm \
  --glob '*.env*' --glob '*.yaml' --glob '*.yml' --glob '*.json' --glob '*.toml' \
  | head -400

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 50381


🏁 Script executed:

#!/bin/bash
set -eu
printf '%s\n' '--- all feature-flag declarations ---'
rg -n --no-ignore '^[[:space:]]*(assistant_studio_enabled|copilot_studio_enabled):|feature_flags:' \
  --glob '!**/node_modules/**' --glob '!**/dist/**' --glob '!**/build/**' \
  --glob '!**/.git/**' . | head -300
printf '%s\n' '--- platform config and Helm config wiring ---'
cat -n packages/nmp_platform/config/local.yaml | sed -n '165,205p'
cat -n k8s/helm/templates/platform-configmap.yaml | sed -n '1,220p'
rg -n -C 4 'platform-config|config.*yaml|global_settings|NMP_.*FEATURE|feature_flags' \
  k8s/helm/values.yaml k8s/helm/templates packages/nmp_platform services/studio \
  --glob '*.yaml' --glob '*.yml' --glob '*.py' --glob '*.toml' | head -500

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 43526


🏁 Script executed:

#!/bin/bash
set -eu
printf '%s\n' '--- Helm config inputs ---'
rg -n -C 8 'define "nemo-platform.calculatedConfig"|calculatedConfig|config:' \
  k8s/helm/templates k8s/helm/values.yaml k8s/helm/README.md \
  --glob '*.tpl' --glob '*.yaml' --glob '*.md' | head -500
printf '%s\n' '--- Helm values structure ---'
cat -n k8s/helm/values.yaml | sed -n '1,180p'
printf '%s\n' '--- local and deployment configuration behavior ---'
cat -n services/studio/src/nmp/studio/config.py | sed -n '80,180p'

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 32495


Set platformConfig.studio.feature_flags.assistant_studio_enabled: true for Helm deployments. The runtime mapping defaults to false when this setting is absent. Local configuration already enables it.

🤖 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/env/.env.fastapi` at line 23, Update the Helm deployment
configuration for VITE_FF_ASSISTANT_STUDIO_ENABLED so the runtime mapping sets
platformConfig.studio.feature_flags.assistant_studio_enabled to true, rather
than relying on the false default when the setting is absent. Preserve the
existing local configuration behavior.

Comment thread web/packages/studio/src/routes/agents/AssistantChatRoute/api.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: 7

Caution

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

⚠️ Outside diff range comments (2)
web/packages/studio/src/routes/agents/AssistantChatRoute/useAssistantChatRuntime.ts (1)

695-708: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Prevent stale permission results from writing into another session.

If resolveAssistantPermission completes after loadSession, Line 703 appends denial text to the newly loaded session. resolveInputRequest already guards this case at Lines 650-655. Capture the session and request IDs before the await. Ignore stale completions before appendUserMessage and state updates. Add a matching stale-permission test.

🤖 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/AssistantChatRoute/useAssistantChatRuntime.ts`
around lines 695 - 708, Update the permission-resolution flow in
resolveAssistantPermission to capture the current sessionId and
activePermission.requestId before awaiting completion, then ignore the result if
either identifier no longer matches the active session or permission request.
Apply this stale-result guard before appendUserMessage and dispatchBlocking, and
add a test covering completion after loadSession to ensure the newly loaded
session is unchanged.
services/studio/src/nmp/studio/assistant.py (1)

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

Preserve legacy Copilot conversation history.

The rename changed the entity type from copilot_conversation to assistant_conversation and the name from copilot-{session_id} to assistant-{session_id}. Add a migration or compatibility reads before rollout.

🤖 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 `@services/studio/src/nmp/studio/assistant.py` around lines 864 - 894, Update
the session-history loading flow around AssistantConversation and
_conversation_name to preserve legacy Copilot history: when the assistant entity
lookup finds nothing, also read the legacy copilot_conversation entity using the
copilot-{session_id} naming convention, while retaining ownership validation and
response mapping. Prefer a migration if the existing persistence APIs support
it; otherwise implement compatibility reads before rollout.
🧹 Nitpick comments (6)
web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantChatThread.tsx (2)

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

Use import type for type-only imports.

Move AgentBlockingInputSubmission, AgentDecisionChoice, and FC to import type declarations.

Proposed change
-import { type AgentBlockingInputSubmission } from '`@studio/components/agents/AgentBlockingInput`';
+import type { AgentBlockingInputSubmission } from '`@studio/components/agents/AgentBlockingInput`';
 import {
   AgentDecisionInput,
-  type AgentDecisionChoice,
 } from '`@studio/components/agents/AgentDecisionInput`';
+import type { AgentDecisionChoice } from '`@studio/components/agents/AgentDecisionInput`';
-import { type FC, useCallback, useLayoutEffect, useMemo, useRef } from 'react';
+import type { FC } from 'react';
+import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';

As per coding guidelines, “Use import type for type-only imports.”

🤖 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/AssistantChatRoute/AssistantChatThread.tsx`
around lines 6 - 16, Update the imports in AssistantChatThread.tsx to use import
type for the type-only symbols AgentBlockingInputSubmission,
AgentDecisionChoice, and FC, while keeping the runtime React hooks and component
imports as regular imports.

Source: Coding guidelines


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

Mark public props as readonly.

  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantChatThread.tsx#L37-L42: Mark every AssistantChatThreadProps property as readonly.
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.tsx#L11-L14: Mark every AssistantStudioLinkProps property as readonly.

As per coding guidelines, “Use readonly for immutable properties.”

🤖 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/AssistantChatRoute/AssistantChatThread.tsx`
around lines 37 - 42, Mark every property in AssistantChatThreadProps in
web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantChatThread.tsx
(lines 37-42) as readonly. Apply the same change to every property in
AssistantStudioLinkProps in
web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.tsx
(lines 11-14).

Source: Coding guidelines

web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.tsx (1)

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

Add an explicit return type.

AssistantStudioLink is a public API. Declare its React element return type.

As per coding guidelines, “Use explicit return types for public APIs and complex functions.”

🤖 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/AssistantChatRoute/AssistantStudioLink.tsx`
at line 19, Update the public AssistantStudioLink component declaration to
include an explicit React element return type, while preserving its existing
props and rendering behavior.

Source: Coding guidelines

agents/nemo-studio-assistant/tests/smoke_test.md (1)

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

Add the required runbook sections.

Before ## Static and unit validation, add ## Prerequisites with the required platform endpoint, uv, nemo, deployment access, and cleanup permissions. After the final section, add ## Next Steps with cross-links to the assistant deployment and Studio documentation.

As per coding guidelines, documentation pages must list prerequisites at the top and include a Next Steps section with cross-links.

Also applies to: 76-82

🤖 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-assistant/tests/smoke_test.md` around lines 7 - 17, Add a
top-level Prerequisites section before Static and unit validation, documenting
the required platform endpoint, uv, nemo, deployment access, and cleanup
permissions. Append a Next Steps section after the final existing section with
cross-links to the assistant deployment and Studio documentation, keeping the
current validation commands unchanged.

Source: Coding guidelines

web/packages/studio/env/.env.dev.local.sample (1)

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

Move the key before VITE_FF_BASE_MODELS_ENABLED.

dotenv-linter reports an UnorderedKey warning for this line.

🤖 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/env/.env.dev.local.sample` at line 26, Move
VITE_FF_ASSISTANT_STUDIO_ENABLED so it appears before
VITE_FF_BASE_MODELS_ENABLED in the environment sample, preserving both keys and
their values.

Source: Linters/SAST tools

services/studio/src/nmp/studio/studio_links.py (1)

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

Consider keeping copilot as an alias.

The copilot destination key is gone, and the alias list does not include it. The code keeps the legacy copilot_studio_enabled flag at Line 421 for compatibility, so any stored or model-emitted destination="copilot" now fails to resolve. Add the alias to match the flag-level compatibility.

♻️ Proposed change
-        aliases=("claude_code", "claude_code_chat", "assistant_chat"),
+        aliases=("claude_code", "claude_code_chat", "assistant_chat", "copilot", "copilot_chat"),
🤖 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 `@services/studio/src/nmp/studio/studio_links.py` around lines 35 - 38, Add
"copilot" to the aliases tuple in the assistant StudioLinkDestination definition
so legacy destination="copilot" values resolve to the existing assistant
destination, matching the compatibility behavior of copilot_studio_enabled.
🤖 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-assistant-spec/skills/auditor/SKILL.md`:
- Around line 7-10: Update the auditor CRUD guidance for nemo_api audit.targets
and audit.configs so every create, list, retrieve, update, and delete call
passes workspace set to the active request workspace. Ensure both target and
config operations consistently include this workspace argument.

In `@agents/nemo-studio-assistant/skills/auditor/SKILL.md`:
- Line 5: Update the top-level headings in
agents/nemo-studio-assistant/skills/auditor/SKILL.md:5-5 and
agents/nemo-studio-assistant/skills/entities/SKILL.md:5-5 by prefixing “Auditor
tasks” and “Entity tasks” with a level-one Markdown heading marker,
respectively.

In `@agents/nemo-studio-assistant/skills/files/SKILL.md`:
- Around line 19-29: Update the delete workflow in the documented mutation steps
to require a scoped read-back confirming that the targeted file or fileset is
absent before proceeding to step 8 or reporting success. Keep the existing
identity scoping, and treat any result that does not confirm absence as an
unknown commit state: stop without continuing or cleanup assumptions.

In
`@agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/inference/SKILL.md`:
- Line 5: Update the task titles to Markdown H1 headings: in
agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/inference/SKILL.md:5
change “Inference provider tasks”; in
agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/secrets/SKILL.md:5
change “Secret tasks”; and in
agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/workspace/SKILL.md:5
change “Workspace tasks”.

In `@web/packages/studio/env/.env.fastapi`:
- Line 23: Update the Helm deployment configuration for
VITE_FF_ASSISTANT_STUDIO_ENABLED so the runtime mapping sets
platformConfig.studio.feature_flags.assistant_studio_enabled to true, rather
than relying on the false default when the setting is absent. Preserve the
existing local configuration behavior.

In `@web/packages/studio/src/routes/agents/AssistantChatRoute/api.ts`:
- Around line 168-178: Update the parsing logic around parseModelSource and
assistantModel to preserve legacy artifacts: accept copilot_model as a fallback
for assistant_model, treat model_source "copilot" as the assistant source, and
ensure persisted copilot-<session_id> session names remain readable or are
migrated to assistant-<session_id> before deployment.

In
`@web/packages/studio/src/routes/agents/AssistantChatRoute/studioUiNavigationSuggestions.ts`:
- Around line 210-217: Update the deploy-agent pattern in the navigation
suggestions to exclude prompts whose agent reference is followed by
code-oriented terms such as class, component, helper, test, function, or module,
matching the exclusion used by the build/create pattern. Add “Deploy an agent
component” to the ordinary-prompt test cases.

---

Outside diff comments:
In `@services/studio/src/nmp/studio/assistant.py`:
- Around line 864-894: Update the session-history loading flow around
AssistantConversation and _conversation_name to preserve legacy Copilot history:
when the assistant entity lookup finds nothing, also read the legacy
copilot_conversation entity using the copilot-{session_id} naming convention,
while retaining ownership validation and response mapping. Prefer a migration if
the existing persistence APIs support it; otherwise implement compatibility
reads before rollout.

In
`@web/packages/studio/src/routes/agents/AssistantChatRoute/useAssistantChatRuntime.ts`:
- Around line 695-708: Update the permission-resolution flow in
resolveAssistantPermission to capture the current sessionId and
activePermission.requestId before awaiting completion, then ignore the result if
either identifier no longer matches the active session or permission request.
Apply this stale-result guard before appendUserMessage and dispatchBlocking, and
add a test covering completion after loadSession to ensure the newly loaded
session is unchanged.

---

Nitpick comments:
In `@agents/nemo-studio-assistant/tests/smoke_test.md`:
- Around line 7-17: Add a top-level Prerequisites section before Static and unit
validation, documenting the required platform endpoint, uv, nemo, deployment
access, and cleanup permissions. Append a Next Steps section after the final
existing section with cross-links to the assistant deployment and Studio
documentation, keeping the current validation commands unchanged.

In `@services/studio/src/nmp/studio/studio_links.py`:
- Around line 35-38: Add "copilot" to the aliases tuple in the assistant
StudioLinkDestination definition so legacy destination="copilot" values resolve
to the existing assistant destination, matching the compatibility behavior of
copilot_studio_enabled.

In `@web/packages/studio/env/.env.dev.local.sample`:
- Line 26: Move VITE_FF_ASSISTANT_STUDIO_ENABLED so it appears before
VITE_FF_BASE_MODELS_ENABLED in the environment sample, preserving both keys and
their values.

In
`@web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantChatThread.tsx`:
- Around line 6-16: Update the imports in AssistantChatThread.tsx to use import
type for the type-only symbols AgentBlockingInputSubmission,
AgentDecisionChoice, and FC, while keeping the runtime React hooks and component
imports as regular imports.
- Around line 37-42: Mark every property in AssistantChatThreadProps in
web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantChatThread.tsx
(lines 37-42) as readonly. Apply the same change to every property in
AssistantStudioLinkProps in
web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.tsx
(lines 11-14).

In
`@web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.tsx`:
- Line 19: Update the public AssistantStudioLink component declaration to
include an explicit React element return type, while preserving its existing
props and rendering behavior.
🪄 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: 8fb05096-9c34-4502-b053-28b74b4d6fa3

📥 Commits

Reviewing files that changed from the base of the PR and between d4b8171 and 1b9fcd0.

⛔ Files ignored due to path filters (1)
  • agents/nemo-studio-assistant/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (148)
  • agents/nemo-studio-assistant-spec/AGENT-SPEC.md
  • agents/nemo-studio-assistant-spec/agent.yaml
  • agents/nemo-studio-assistant-spec/skills/auditor/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/entities/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/evaluator/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/files/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/guardrails/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/inference/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/secrets/SKILL.md
  • agents/nemo-studio-assistant-spec/skills/workspace/SKILL.md
  • agents/nemo-studio-assistant/.dockerignore
  • agents/nemo-studio-assistant/Dockerfile.fabric-local
  • agents/nemo-studio-assistant/agent.yaml
  • agents/nemo-studio-assistant/constraints.fabric-local.txt
  • agents/nemo-studio-assistant/pyproject.toml
  • agents/nemo-studio-assistant/skills/auditor/SKILL.md
  • agents/nemo-studio-assistant/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-assistant/skills/entities/SKILL.md
  • agents/nemo-studio-assistant/skills/evaluator/SKILL.md
  • agents/nemo-studio-assistant/skills/files/SKILL.md
  • agents/nemo-studio-assistant/skills/guardrails/SKILL.md
  • agents/nemo-studio-assistant/skills/inference/SKILL.md
  • agents/nemo-studio-assistant/skills/secrets/SKILL.md
  • agents/nemo-studio-assistant/skills/workspace/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/mcp_server.py
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/nemo-studio-assistant-eval-data.json
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/register.py
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/.gitkeep
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/auditor/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/entities/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/evaluator/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/files/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/guardrails/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/inference/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/secrets/SKILL.md
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/workspace/SKILL.md
  • agents/nemo-studio-assistant/tests/smoke_test.md
  • agents/nemo-studio-assistant/tests/test_nemo_studio_assistant.py
  • agents/nemo-studio-assistant/wheelhouse/nemo_platform-0.3.0.post217.dev0+b6f22880a-py3-none-any.whl
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • docs/about/release-notes/current-release.mdx
  • packages/nmp_platform/config/local.yaml
  • pyproject.toml
  • pytest.ini
  • services/studio/src/nmp/studio/assistant.py
  • services/studio/src/nmp/studio/assistant_artifacts.py
  • services/studio/src/nmp/studio/assistant_mcp_tools.py
  • services/studio/src/nmp/studio/assistant_skills.py
  • services/studio/src/nmp/studio/entities.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_assistant.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/mocks/studio-ui/chip/constants.ts
  • web/packages/studio/src/mocks/studio-ui/chip/tools.json
  • 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/DashboardLandingRoute/skillActionSuggestions.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/skillActionTemplates.test.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/skillDisplayName.test.ts
  • web/packages/studio/src/routes/DashboardLandingRoute/skillDisplayName.ts
  • 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/AssistantChatRoute/AssistantChatThread.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantChatThread.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantHistoryPanel.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantHistoryPanel.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantLayout.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLink.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantStudioLinkTarget.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantToolCallPart.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantToolCallPart.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantTopBarChat.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/AssistantTopBarChat.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/BlockingInputComposer.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/BlockingInputComposer.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/ChatThreadErrorBoundary.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/ChatThreadErrorBoundary.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/JobProgressToolCall.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/JobProgressToolCall.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/activeSessionStorage.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/api.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/api.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/artifacts.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/artifacts.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/blockingInputRequest.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/context/AssistantChatProvider.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/context/AssistantChatProvider.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/context/useAssistantChatContext.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/ArtifactSections.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/AssistantArtifactsPane.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/FloatingPanel.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/HistoryPanelContents.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/HistoryPanelSkeletons.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/HistorySessionButton.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/SkillCard.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/SkillsPanelContents.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/helpers.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/helpers.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/historyPanel/types.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/index.test.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/index.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/jobProgressConsts.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/stream.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/stream.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/studioUiNavigationSuggestions.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/studioUiNavigationSuggestions.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/CollapsedThinkingToolCall.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/FileChangeToolCallCard.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/SubtleToolCallRow.tsx
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/constants.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/helpers.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolCall/types.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolParts.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/toolParts.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/types.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/useAssistantChatRuntime.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/useAssistantChatRuntime.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/useCustomAssistantChatRuntime.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/useCustomAssistantChatRuntime.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/util.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/util.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/utils/jobProgress.test.ts
  • web/packages/studio/src/routes/agents/AssistantChatRoute/utils/jobProgress.ts
  • web/packages/studio/src/routes/agents/CopilotChatRoute/context/useCopilotChatContext.ts
  • web/packages/studio/src/routes/agents/CopilotChatRoute/types.ts
  • web/packages/studio/src/routes/groups/dashboardRoutes.tsx
  • web/packages/studio/src/routes/index.test.tsx
  • web/packages/studio/src/routes/utils.ts
  • web/packages/studio/src/util/localStorage.ts
💤 Files with no reviewable changes (4)
  • agents/nemo-studio-assistant/.dockerignore
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • web/packages/studio/src/routes/agents/CopilotChatRoute/context/useCopilotChatContext.ts
  • web/packages/studio/src/routes/agents/CopilotChatRoute/types.ts
🛑 Comments failed to post (5)
agents/nemo-studio-assistant-spec/skills/auditor/SKILL.md (1)

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

🧩 Analysis chain

🏁 Script executed:

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

rg -n -C 3 \
  'audit\.(targets|configs)|workspace=' \
  agents/nemo-studio-assistant-spec \
  agents/nemo-studio-assistant \
  services/studio

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 50381


🏁 Script executed:

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

printf '%s\n' '--- audit references ---'
rg -n -C 4 'audit\.(targets|configs)|class .*Audit|Audit(Target|Config)|audit' \
  --glob '!**/SKILL.md' \
  --glob '!**/node_modules/**' \
  --glob '!**/dist/**' \
  . | head -n 1200

printf '%s\n' '--- likely SDK/resource definitions ---'
rg -n -C 3 'resource(s)?=|workspace.*required|workspace.*scope|workspace' \
  --glob '*.py' --glob '*.ts' --glob '*.tsx' \
  agents services libs packages 2>/dev/null | rg -n -C 2 'audit|resource|workspace' | head -n 1200

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 50384


🏁 Script executed:

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

for f in \
  plugins/nemo-auditor/src/nemo_auditor/sdk_resources/_parent.py \
  plugins/nemo-auditor/src/nemo_auditor/sdk_resources/targets.py \
  plugins/nemo-auditor/src/nemo_auditor/sdk_resources/configs.py \
  plugins/nemo-auditor/src/nemo_auditor/entities.py \
  plugins/nemo-auditor/src/nemo_auditor/api/v2/targets.py \
  plugins/nemo-auditor/src/nemo_auditor/api/v2/configs.py
do
  if [ -f "$f" ]; then
    printf '\n--- %s ---\n' "$f"
    wc -l "$f"
    rg -n -C 2 'workspace|/v2/workspaces|def (create|list|get|retrieve|update|delete)|class Audit' "$f"
  fi
done

printf '\n--- audit SDK registration and generic dispatch ---\n'
rg -n -C 4 'auditor|audit\.targets|audit\.configs|resource.*audit|targets|configs' \
  sdk agents/nemo-studio-assistant/src agents/nemo-studio-assistant/tests \
  --glob '*.py' --glob '*.ts' 2>/dev/null | head -n 1600

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 50382


🏁 Script executed:

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

printf '%s\n' '--- nemo_api dispatch ---'
sed -n '220,390p' agents/nemo-studio-assistant/src/nemo_studio_assistant/register.py

printf '%s\n' '--- auditor client/resource registration ---'
rg -n -C 5 'class .*Auditor|Auditor.*Resource|targets|configs|auditor' \
  plugins/nemo-auditor/src \
  sdk/python/nemo-platform/src \
  --glob '*.py' | head -n 1400

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 50382


Pass the active workspace to every auditor CRUD call.

The auditor SDK requires workspace for audit.targets and audit.configs. Add workspace="<active request workspace>" to every create, list, retrieve, update, and delete 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-assistant-spec/skills/auditor/SKILL.md` around lines 7 -
10, Update the auditor CRUD guidance for nemo_api audit.targets and
audit.configs so every create, list, retrieve, update, and delete call passes
workspace set to the active request workspace. Ensure both target and config
operations consistently include this workspace argument.
agents/nemo-studio-assistant/skills/auditor/SKILL.md (1)

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

Add the top-level headings required by markdownlint.

  • agents/nemo-studio-assistant/skills/auditor/SKILL.md#L5-L5: Change Auditor tasks to # Auditor tasks.
  • agents/nemo-studio-assistant/skills/entities/SKILL.md#L5-L5: Change Entity tasks to # Entity tasks.
🧰 Tools
🪛 markdownlint-cli2 (0.23.2)

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

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

📍 Affects 2 files
  • agents/nemo-studio-assistant/skills/auditor/SKILL.md#L5-L5 (this comment)
  • agents/nemo-studio-assistant/skills/entities/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-assistant/skills/auditor/SKILL.md` at line 5, Update the
top-level headings in agents/nemo-studio-assistant/skills/auditor/SKILL.md:5-5
and agents/nemo-studio-assistant/skills/entities/SKILL.md:5-5 by prefixing
“Auditor tasks” and “Entity tasks” with a level-one Markdown heading marker,
respectively.

Source: Linters/SAST tools

agents/nemo-studio-assistant/skills/files/SKILL.md (1)

19-29: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Define delete verification explicitly.

The read-back rule names description, content/checksum, and ownership, but a deleted file or fileset has no content to confirm. Steps 6-7 therefore have no explicit success condition. Require a scoped read-back that confirms absence before continuing to step 8 or reporting success; otherwise an unknown delete can leave temporary resources behind.

Also applies to: 42-52

🤖 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-assistant/skills/files/SKILL.md` around lines 19 - 29,
Update the delete workflow in the documented mutation steps to require a scoped
read-back confirming that the targeted file or fileset is absent before
proceeding to step 8 or reporting success. Keep the existing identity scoping,
and treat any result that does not confirm absence as an unknown commit state:
stop without continuing or cleanup assumptions.
agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/inference/SKILL.md (1)

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

Use a Markdown H1 for each skill task title.

The three skill files trigger the same MD041 warning because the title after front matter is plain text.

  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/inference/SKILL.md#L5-L5: Change Inference provider tasks to # Inference provider tasks.
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/secrets/SKILL.md#L5-L5: Change Secret tasks to # Secret tasks.
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/workspace/SKILL.md#L5-L5: Change Workspace tasks to # Workspace tasks.
🧰 Tools
🪛 markdownlint-cli2 (0.23.2)

[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-assistant/src/nemo_studio_assistant/skills/inference/SKILL.md#L5-L5 (this comment)
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/secrets/SKILL.md#L5-L5
  • agents/nemo-studio-assistant/src/nemo_studio_assistant/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-assistant/src/nemo_studio_assistant/skills/inference/SKILL.md`
at line 5, Update the task titles to Markdown H1 headings: in
agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/inference/SKILL.md:5
change “Inference provider tasks”; in
agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/secrets/SKILL.md:5
change “Secret tasks”; and in
agents/nemo-studio-assistant/src/nemo_studio_assistant/skills/workspace/SKILL.md:5
change “Workspace tasks”.

Source: Linters/SAST tools

web/packages/studio/src/routes/agents/AssistantChatRoute/studioUiNavigationSuggestions.ts (1)

210-217: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Exclude code-oriented deploy prompts.

Deploy an agent component matches line 216 and opens the Agents suggestion. Apply the same suffix exclusion used for build and create. Add this prompt to the ordinary-prompt test.

Proposed fix
-      /\bdeploy (an? )?agent\b/i,
+      /\bdeploy (an? )?agent\b(?!\s+(class|component|helper|test|function|module))\b/i,
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

      /\bmanage agents?\b/i,
      /\bview agents?\b/i,
      /\b(build|create) (an? )?agent\b(?!\s+(class|component|helper|test|function|module))\b/i,
      /\bcreate example agent\b/i,
      /\bclone (an? )?agent\b/i,
      /\bchat with (an? )?agent\b/i,
      /\bdeploy (an? )?agent\b(?!\s+(class|component|helper|test|function|module))\b/i,
      /\btry (a )?deployed agent\b/i,
🤖 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/AssistantChatRoute/studioUiNavigationSuggestions.ts`
around lines 210 - 217, Update the deploy-agent pattern in the navigation
suggestions to exclude prompts whose agent reference is followed by
code-oriented terms such as class, component, helper, test, function, or module,
matching the exclusion used by the build/create pattern. Add “Deploy an agent
component” to the ordinary-prompt test cases.

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.

1 participant