Skip to content

chore(copilot): Switch copilot from NAT to Fabric - #1128

Merged
dmariali merged 11 commits into
mainfrom
switch-copilot-from-nat-to-pilot
Aug 12, 2026
Merged

chore(copilot): Switch copilot from NAT to Fabric#1128
dmariali merged 11 commits into
mainfrom
switch-copilot-from-nat-to-pilot

Conversation

@dmariali

@dmariali dmariali commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Behaviour wise things should be the same, just changing the wrapper from NAT to Fabric.

Changes

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with documentation updates
  • Documentation only
  • Contributor tooling or automation
  • CI, build, or test infrastructure

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Documentation updated for user-visible behavior
  • Documentation not applicable — justification:

Verification

  • Pull request title follows the repository's Conventional Commit format
  • Every commit includes an appropriate Signed-off-by: trailer
  • uv run pre-commit run -a passes, or any blocked checks are identified below
  • Targeted tests pass, or tests are marked not applicable above
  • No secrets, API keys, or credentials are included

Targeted validation:

Summary by CodeRabbit

  • New Features

    • Added Fabric-hosted NeMo Studio Copilot support.
    • Added MCP tools and guided workflows for workspace, file, entity, secret, inference, evaluation, auditing, and guardrail tasks.
  • Improvements

    • Added workspace-aware operations, session validation, approval requirements, and final-state verification.
    • Added Fabric packaging, deployment, invocation, and Studio streaming support.
    • Preserved platform runtime settings when launching connected tools.
  • Documentation & Tests

    • Updated Fabric validation guidance and expanded focused test coverage.
    • Removed legacy NAT deployment and evaluation configurations.

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

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 31964/40579 78.8% 63.5%
Integration Tests 18543/38505 48.2% 20.8%

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

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

Use the following commands to manage reviews:

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

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The NeMo Studio Copilot moves from NAT workflows to a Fabric-hosted DeepAgents agent. It adds packaged skills, an stdio MCP server, workspace-aware SDK tools, mutation approval, a Fabric image, runtime environment forwarding, and focused tests.

Changes

Fabric NeMo Studio Copilot

Layer / File(s) Summary
Agent contract and skill workflows
agents/nemo-studio-copilot-spec/..., agents/nemo-studio-copilot/agent.yaml, agents/nemo-studio-copilot/skills/*, agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/*, agents/nemo-studio-copilot/constraints.fabric-local.txt
The specifications, configurations, and skill playbooks define Fabric execution, MCP access, workspace and session propagation, mutation approval, resource verification, and NeMo Platform CRUD workflows.
MCP server and SDK tool runtime
agents/nemo-studio-copilot/pyproject.toml, agents/nemo-studio-copilot/src/nemo_studio_copilot/mcp_server.py, agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
The package adds the nemo-studio-copilot-mcp entry point and stdio server. SDK tools validate parameters and sessions, require approval for mutations, use workspace-specific clients, and remove NAT graph orchestration and fast paths.
Fabric image and deployment workflow
agents/nemo-studio-copilot/Dockerfile.fabric-local, agents/nemo-studio-copilot/.dockerignore, agents/nemo-studio-copilot/tests/smoke_test.md
The Docker image installs the pinned relay and NeMo Agents runtime, packages the agent, and starts the Fabric server. Smoke-test instructions cover registration, deployment, invocation, streaming, approval checks, and cleanup.
Configuration and runtime validation
agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py, plugins/nemo-agents/src/nemo_agents_plugin/fabric/translator.py, plugins/nemo-agents/tests/unit/test_fabric_translator.py, pytest.ini
Tests cover configuration parity, skill packaging, MCP exposure, SDK calls, mutation approval, callback validation, workspace handling, job-status lookup, and forwarding of Platform runtime environment variables.

Suggested labels: refactor

Suggested reviewers: mikeknep

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 17.65% 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 main change from NAT to Fabric for the Copilot.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch switch-copilot-from-nat-to-pilot

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 14

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)

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

Wrap json.loads so a malformed payload does not escape as a traceback.

select_*, job_progress, studio_link, and ask_user_question do not catch exceptions. A non-JSON text field here raises json.JSONDecodeError out of those tools instead of returning an error string.

🔧 Proposed fix
-    decoded = json.loads(first["text"])
+    try:
+        decoded = json.loads(first["text"])
+    except json.JSONDecodeError as exc:
+        raise RuntimeError(f"Studio callback tool returned invalid JSON: {exc}") from exc
     if not isinstance(decoded, dict):
         raise RuntimeError("Studio callback tool returned a non-object result")
🤖 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` around lines
109 - 111, Update the JSON decoding in the callback result handling around
decoded and the affected select_*, job_progress, studio_link, and
ask_user_question tools so json.loads failures are caught and converted to the
tools’ existing error-string result path. Preserve the current non-object
validation for successfully decoded payloads, and prevent JSONDecodeError from
escaping to callers.
🧹 Nitpick comments (9)
agents/nemo-studio-copilot/Dockerfile.fabric-local (2)

23-27: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Add bounded retries and timeouts to the installer download.

curl -fsSL can hang indefinitely and has no retry policy. A transient GitHub failure also fails the image build immediately. Add bounded connection, total, and retry limits.

Suggested change
-    curl -fsSL https://raw.githubusercontent.com/NVIDIA/NeMo-Relay/40c5990361afc26ae8b901ff1f49c2b03ddd9ede/install.sh -o /tmp/install-nemo-relay.sh && \
+    curl -fsSL --retry 5 --retry-delay 2 --connect-timeout 10 --max-time 60 \
+      https://raw.githubusercontent.com/NVIDIA/NeMo-Relay/40c5990361afc26ae8b901ff1f49c2b03ddd9ede/install.sh \
+      -o /tmp/install-nemo-relay.sh && \
🤖 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/Dockerfile.fabric-local` around lines 23 - 27,
Update the installer download command in the Dockerfile RUN chain to configure
bounded connection and total timeouts plus a finite retry policy for transient
failures, while preserving the existing URL, checksum verification,
installation, cleanup, and version check.

15-18: 🔒 Security & Privacy | 🔵 Trivial | 🏗️ Heavy lift

Keep build-only compilers out of the runtime image.

g++ and gcc remain available to the agent user. If no runtime package compiles code, use a builder stage or remove these packages in the same layer after installation.

🤖 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/Dockerfile.fabric-local` around lines 15 - 18,
Update the Dockerfile build flow so g++ and gcc are unavailable in the final
runtime image: either install them only in a builder stage or remove them in the
same apt layer after any required build steps. Preserve the runtime installation
of ca-certificates and curl and ensure the agent user cannot access the
compilers.
agents/nemo-studio-copilot/tests/smoke_test.md (3)

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

Add the required Next Steps section.

End the page with cross-links to docs/agents/index.mdx and the Fabric evaluation follow-up.

As per coding guidelines, Markdown pages must include a Next Steps section at the end with cross-links.

🤖 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/tests/smoke_test.md` around lines 63 - 69, Add a
final “Next Steps” section to the smoke test page, including cross-links to
docs/agents/index.mdx and the Fabric evaluation follow-up. Keep the existing
evaluation-status content unchanged and ensure this section is the page’s last
content.

Source: Coding guidelines


22-50: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Add the Python SDK variant or declare this runbook CLI-only.

This Markdown page provides only CLI workflows. Add Python SDK examples in tab sets for registration, deployment, and invocation, or document an explicit exemption for this internal test artifact.

As per coding guidelines, Markdown pages must provide both Python SDK and CLI examples in tab sets.

🤖 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/tests/smoke_test.md` around lines 22 - 50, Update
the smoke-test runbook to either add Python SDK examples in tabbed sections
alongside the existing CLI workflows for registration, packaging/deployment, and
invocation, or explicitly declare the document exempt as an internal CLI-only
test artifact. Preserve the current CLI commands and ensure the chosen approach
is stated clearly in the page.

Source: Coding guidelines


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

Add prerequisites before the procedure.

List the required uv and nemo installations, Docker, platform availability, credentials, and NMP_BASE_URL. State that the variable must remain exported when commands run independently.

As per coding guidelines, documentation pages must list prerequisites at the top.

🤖 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/tests/smoke_test.md` around lines 1 - 9, Add a
prerequisites section at the top of the smoke test documentation before “Static
and unit validation.” List the required uv and nemo installations, Docker,
platform availability, credentials, and NMP_BASE_URL, explicitly noting that
NMP_BASE_URL must remain exported when commands are run independently.

Source: Coding guidelines

agents/nemo-studio-copilot-spec/AGENT-SPEC.md (1)

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

Remove unsupported fast-path telemetry requirements.

The Fabric configuration has no fast-path selector or replacement deterministic branch. Remove fast-path selection from Observability and fast-path hit rate from Signals.

🤖 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-spec/AGENT-SPEC.md` around lines 58 - 61, Update
the Observability entry to remove the unsupported “fast-path selection”
telemetry requirement, and update the Signals section to remove “fast-path hit
rate.” Preserve the remaining telemetry and verification requirements unchanged.
agents/nemo-studio-copilot/pyproject.toml (1)

13-17: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Declare pydantic explicitly.

src/nemo_studio_copilot/register.py imports pydantic.BaseModel at line 14. The dependency set relies on it arriving transitively through nemo-platform or fastmcp. Add it directly.

🔧 Proposed fix
 dependencies = [
     "nemo-platform",
     "fastmcp>=3.2.0",
     "httpx",
+    "pydantic>=2",
 ]
🤖 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/pyproject.toml` around lines 13 - 17, Update the
dependencies list to explicitly include pydantic, matching the direct import
used by register.py’s BaseModel usage; retain the existing dependencies
unchanged.
agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py (1)

348-356: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Apply the same attribute guard to service.

_resolve_resource rejects empty and _-prefixed components at line 54. check_status calls getattr(_get_client(), service) with no guard, so private client attributes are reachable. Reuse the validated resolver.

🔧 Proposed fix
     try:
-        svc = getattr(_get_client(), service)
+        svc = _resolve_resource(_get_client(), service)
🤖 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` around lines
348 - 356, Update check_status to resolve service through the existing validated
_resolve_resource helper instead of directly calling getattr(_get_client(),
service). Preserve the current sub-resource iteration and status-checking
behavior after obtaining the validated service resource.
agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py (1)

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

Add coverage for an invalid session id and for SSE parsing.

register._request_mutation_approval has two denial branches. This test covers only studio_session_id is None. The non-UUID branch at register.py line 162 is untested. The changed SSE line filter at register.py lines 119-122 also has no test.

🔧 Proposed tests
def test_mutating_nemo_api_rejects_invalid_studio_session(monkeypatch: pytest.MonkeyPatch) -> None:
    called = False

    def create(**_kwargs: object) -> object:
        nonlocal called
        called = True
        return {}

    monkeypatch.setattr(register, "_client", SimpleNamespace(workspaces=SimpleNamespace(create=create)))

    response = register.nemo_api("workspaces", "create", '{"name": "demo"}', studio_session_id="not-a-uuid")

    assert response.startswith("Denied:")
    assert called is False


def test_sse_callback_response_ignores_non_data_lines() -> None:
    body = 'event: message\ndata: {"jsonrpc":"2.0","result":{"content":[{"text":"{\\"behavior\\":\\"allow\\"}"}]}}\n'
    response = httpx.Response(
        200, headers={"content-type": "text/event-stream"}, text=body, request=httpx.Request("POST", "http://t")
    )

    assert register._parse_studio_callback_response(response) == {"behavior": "allow"}
🤖 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/tests/test_nemo_studio_copilot.py` around lines 80
- 93, Add test coverage for the two untested branches in
register._request_mutation_approval and the SSE parsing change: add a nemo_api
test that passes an invalid studio_session_id value to verify the non-UUID
denial path still blocks the mutating workspaces.create call, and add a
_parse_studio_callback_response test that feeds an SSE response containing
non-data lines so the parser ignores them and still returns the expected decoded
payload. Use the existing register.nemo_api and
register._parse_studio_callback_response symbols to keep the new tests aligned
with the current behavior.
🤖 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-spec/AGENT-SPEC.md`:
- Around line 36-37: The request handling around `_get_client()` must propagate
the active request workspace instead of reusing a cached client configured for
another workspace or silently defaulting to “default.” Update the client
acquisition flow to use the request’s workspace for workspace-specific
operations, and require clarification when that workspace is missing; add a
regression test covering requests for different workspaces.

In `@agents/nemo-studio-copilot-spec/skills/benchmark-execution/SKILL.md`:
- Line 11: Correct the README link in the benchmark-execution skill
documentation so its relative path climbs four parent directories to reach
tests/agentic-use/README.md instead of six.

In `@agents/nemo-studio-copilot-spec/skills/evaluator/SKILL.md`:
- Around line 7-9: Update the typical metric-job flow in the evaluator playbook
so workspace creation is conditional: use the active request workspace by
default, and provision a new workspace only when the task explicitly requires
it. Keep the subsequent dataset fileset creation/upload steps targeted at
whichever workspace is selected.

In `@agents/nemo-studio-copilot-spec/skills/files/SKILL.md`:
- Around line 19-22: Update the final verification instructions around the
fileset retrieval and file listing to validate verify.txt’s content, not just
its presence. After confirming the file appears, download it and compare it with
the required content, or validate the service-provided checksum or version;
retain the existing fileset verification steps.
- Line 18: The mutation retry guidance in the failure-handling rule must
distinguish nemo_api errors from confirmed pre-commit validation failures.
Update the instructions covering create, upload_content, and delete so they read
back stable identity or use idempotency keys before retrying, and prohibit
retries when commit state is unknown; preserve the existing stop-and-report
behavior after an unrecoverable retry.

In `@agents/nemo-studio-copilot-spec/skills/workspace/SKILL.md`:
- Around line 7-8: Clarify the undefined “AUT mode” reference in the workspace
skill instructions by defining when it applies and how agents identify it, or
remove the term and express the fallback directly using nemo_api. Update the
instruction mentioning create_workspace and list_workspaces while preserving its
intent.
- Around line 10-13: Update the mutating nemo_api examples for workspaces to
include a valid studio_session_id in the create and delete params, while leaving
the read-only list and retrieve examples unchanged. Ensure the documented call
shapes are accepted by register.nemo_api rather than returning Denied.

In `@agents/nemo-studio-copilot/Dockerfile.fabric-local`:
- Around line 2-8: Update the Dockerfile’s FROM and uv COPY image references to
use immutable digest pins, and ensure the dependency installation explicitly
consumes the available uv.lock or an in-context constraints file. Keep the
constraints file within the build context or pass it into the build, and enforce
the required dependency set including nemo-fabric==0.1.0.

In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py`:
- Around line 163-166: Update _request_mutation_approval to return
approval["updatedInput"] when the user allows the operation, while preserving
its denial response; then update nemo_api to execute the mutation with that
approved input instead of the original params, including the existing behavior
when no edits are provided.
- Around line 184-198: Update the request flow in the surrounding registration
handler to parse and validate params before calling _request_mutation_approval,
then use normalized_action consistently for _call_sdk_method after the read-only
check. Preserve the existing denial behavior and JSON-object validation.

In `@agents/nemo-studio-copilot/tests/smoke_test.md`:
- Around line 11-16: Add the required `uv run --frozen ty check` command to the
validation block in `smoke_test.md`, alongside the existing pytest and Ruff
commands, so the documented checks include type validation.
- Around line 35-39: Update the deployment lifecycle instructions around the
nemo-studio-copilot deployment command to run deployments wait before invoking
the deployed agent, rather than relying on deployments list for readiness. After
verification, remove the temporary workspace and run undeploy followed by delete
for the agent so repeated smoke-test runs clean up all state.
- Around line 63-69: Restore automated coverage for all three cases in
nemo-studio-copilot-eval-data.json by either implementing a Fabric-compatible
evaluation driver targeting /v1/chat/completions or adding deterministic CI
tests for each input. Ensure the coverage runs in CI and replaces the removed
nemo-studio-copilot-eval.yml workflow.

In `@agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py`:
- Around line 10-11: Add nemo-agents-plugin to the copilot test dependency
configuration and regenerate the standalone uv.lock so the imports used by
load_agent_config and translate_agent_config resolve during test collection.

---

Outside diff comments:
In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py`:
- Around line 109-111: Update the JSON decoding in the callback result handling
around decoded and the affected select_*, job_progress, studio_link, and
ask_user_question tools so json.loads failures are caught and converted to the
tools’ existing error-string result path. Preserve the current non-object
validation for successfully decoded payloads, and prevent JSONDecodeError from
escaping to callers.

---

Nitpick comments:
In `@agents/nemo-studio-copilot-spec/AGENT-SPEC.md`:
- Around line 58-61: Update the Observability entry to remove the unsupported
“fast-path selection” telemetry requirement, and update the Signals section to
remove “fast-path hit rate.” Preserve the remaining telemetry and verification
requirements unchanged.

In `@agents/nemo-studio-copilot/Dockerfile.fabric-local`:
- Around line 23-27: Update the installer download command in the Dockerfile RUN
chain to configure bounded connection and total timeouts plus a finite retry
policy for transient failures, while preserving the existing URL, checksum
verification, installation, cleanup, and version check.
- Around line 15-18: Update the Dockerfile build flow so g++ and gcc are
unavailable in the final runtime image: either install them only in a builder
stage or remove them in the same apt layer after any required build steps.
Preserve the runtime installation of ca-certificates and curl and ensure the
agent user cannot access the compilers.

In `@agents/nemo-studio-copilot/pyproject.toml`:
- Around line 13-17: Update the dependencies list to explicitly include
pydantic, matching the direct import used by register.py’s BaseModel usage;
retain the existing dependencies unchanged.

In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py`:
- Around line 348-356: Update check_status to resolve service through the
existing validated _resolve_resource helper instead of directly calling
getattr(_get_client(), service). Preserve the current sub-resource iteration and
status-checking behavior after obtaining the validated service resource.

In `@agents/nemo-studio-copilot/tests/smoke_test.md`:
- Around line 63-69: Add a final “Next Steps” section to the smoke test page,
including cross-links to docs/agents/index.mdx and the Fabric evaluation
follow-up. Keep the existing evaluation-status content unchanged and ensure this
section is the page’s last content.
- Around line 22-50: Update the smoke-test runbook to either add Python SDK
examples in tabbed sections alongside the existing CLI workflows for
registration, packaging/deployment, and invocation, or explicitly declare the
document exempt as an internal CLI-only test artifact. Preserve the current CLI
commands and ensure the chosen approach is stated clearly in the page.
- Around line 1-9: Add a prerequisites section at the top of the smoke test
documentation before “Static and unit validation.” List the required uv and nemo
installations, Docker, platform availability, credentials, and NMP_BASE_URL,
explicitly noting that NMP_BASE_URL must remain exported when commands are run
independently.

In `@agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py`:
- Around line 80-93: Add test coverage for the two untested branches in
register._request_mutation_approval and the SSE parsing change: add a nemo_api
test that passes an invalid studio_session_id value to verify the non-UUID
denial path still blocks the mutating workspaces.create call, and add a
_parse_studio_callback_response test that feeds an SSE response containing
non-data lines so the parser ignores them and still returns the expected decoded
payload. Use the existing register.nemo_api and
register._parse_studio_callback_response symbols to keep the new tests aligned
with the current 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: 13399df6-10e4-4bc3-b4b7-306a72a2bcfd

📥 Commits

Reviewing files that changed from the base of the PR and between a1b7051 and 2a5d07b.

⛔ Files ignored due to path filters (1)
  • agents/nemo-studio-copilot/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (24)
  • agents/nemo-studio-copilot-spec/AGENT-SPEC.md
  • agents/nemo-studio-copilot-spec/agent.yaml
  • agents/nemo-studio-copilot-spec/skills/auditor/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/entities/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/files/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/guardrails/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/inference/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/secrets/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot/.dockerignore
  • agents/nemo-studio-copilot/Dockerfile
  • agents/nemo-studio-copilot/Dockerfile.fabric-local
  • agents/nemo-studio-copilot/agent.yaml
  • agents/nemo-studio-copilot/pyproject.toml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/mcp_server.py
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.py
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
💤 Files with no reviewable changes (6)
  • agents/nemo-studio-copilot/Dockerfile
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.yml
  • agents/nemo-studio-copilot/.dockerignore
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.py

Comment thread agents/nemo-studio-copilot-spec/AGENT-SPEC.md
Comment thread agents/nemo-studio-copilot-spec/skills/benchmark-execution/SKILL.md Outdated
Comment thread agents/nemo-studio-copilot-spec/skills/evaluator/SKILL.md Outdated
Comment thread agents/nemo-studio-copilot-spec/skills/files/SKILL.md Outdated
Comment thread agents/nemo-studio-copilot-spec/skills/files/SKILL.md Outdated
Comment thread agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
Comment thread agents/nemo-studio-copilot/tests/smoke_test.md
Comment thread agents/nemo-studio-copilot/tests/smoke_test.md
Comment thread agents/nemo-studio-copilot/tests/smoke_test.md Outdated
Comment thread agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
@dmariali dmariali changed the title chore(copilot): Switch copilot from nat to pilot chore(copilot): Switch copilot from NAT to Fabric Aug 6, 2026
Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 4

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/tests/smoke_test.md (1)

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

Verify platform readiness before creating the agent.

Follow SETUP.md and run its readiness check after setting NMP_BASE_URL. Do this before nemo agents create so an unavailable platform does not produce misleading deployment failures.

As per coding guidelines, “Before using a running NeMo platform or local nemo CLI instance, follow SETUP.md; for local CLI commands set NMP_BASE_URL=http://localhost:8080 and verify readiness before proceeding.”

🤖 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/tests/smoke_test.md` around lines 29 - 39, Update
the smoke-test setup flow before nemo agents create: use the
SETUP.md-recommended NMP_BASE_URL value, then run the documented platform
readiness check and only proceed with agent creation after it succeeds. Keep the
existing packaging and deployment commands unchanged.

Source: Coding guidelines

🤖 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/skills/benchmark-execution/SKILL.md`:
- Around line 19-20: Update the final-response verification guidance in the
benchmark execution instructions to require at least one direct verification
call, while explicitly preserving any additional skill-specific verification
requirements, including higher call counts.

In `@agents/nemo-studio-copilot/skills/files/SKILL.md`:
- Around line 22-27: Update the mutation retry guidance in SKILL.md so stable
identity alone never proves commit state. Require a unique run marker or
verification of expected description, content, checksum, and ownership before
retrying or continuing; otherwise treat the state as unknown, do not retry, and
report it.

In `@agents/nemo-studio-copilot/skills/workspace/SKILL.md`:
- Around line 10-13: Update every affected nemo_api example to pass
workspace="<active request workspace>". In
agents/nemo-studio-copilot/skills/workspace/SKILL.md lines 10-13, add it to the
list and retrieve calls; in
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md lines
31-38, add it to every file verification and playbook call.

In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py`:
- Line 219: Update the approval handling around approved_input and the workspace
assignment so the approved workspace remains immutable: do not replace the
original workspace with approved_input’s value, or explicitly reject any
workspace change before proceeding. Keep subsequent SDK client operations bound
to the originally approved workspace.

---

Outside diff comments:
In `@agents/nemo-studio-copilot/tests/smoke_test.md`:
- Around line 29-39: Update the smoke-test setup flow before nemo agents create:
use the SETUP.md-recommended NMP_BASE_URL value, then run the documented
platform readiness check and only proceed with agent creation after it succeeds.
Keep the existing packaging and deployment commands unchanged.
🪄 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: a742a3fb-8c92-4af3-8476-923ba667f119

📥 Commits

Reviewing files that changed from the base of the PR and between 2a5d07b and 483ba91.

⛔ Files ignored due to path filters (1)
  • agents/nemo-studio-copilot/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (26)
  • agents/nemo-studio-copilot-spec/AGENT-SPEC.md
  • agents/nemo-studio-copilot-spec/agent.yaml
  • agents/nemo-studio-copilot-spec/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/files/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot/Dockerfile.fabric-local
  • agents/nemo-studio-copilot/agent.yaml
  • agents/nemo-studio-copilot/constraints.fabric-local.txt
  • agents/nemo-studio-copilot/pyproject.toml
  • agents/nemo-studio-copilot/skills/auditor/SKILL.md
  • agents/nemo-studio-copilot/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-copilot/skills/entities/SKILL.md
  • agents/nemo-studio-copilot/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot/skills/files/SKILL.md
  • agents/nemo-studio-copilot/skills/guardrails/SKILL.md
  • agents/nemo-studio-copilot/skills/inference/SKILL.md
  • agents/nemo-studio-copilot/skills/secrets/SKILL.md
  • agents/nemo-studio-copilot/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
  • pytest.ini
🚧 Files skipped from review as they are similar to previous changes (8)
  • agents/nemo-studio-copilot-spec/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot-spec/agent.yaml
  • agents/nemo-studio-copilot-spec/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/files/SKILL.md
  • agents/nemo-studio-copilot-spec/AGENT-SPEC.md
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
  • agents/nemo-studio-copilot/Dockerfile.fabric-local

Comment thread agents/nemo-studio-copilot/skills/benchmark-execution/SKILL.md Outdated
Comment thread agents/nemo-studio-copilot/skills/files/SKILL.md Outdated
Comment thread agents/nemo-studio-copilot/skills/workspace/SKILL.md
Comment thread agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py Outdated
Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>

# Conflicts:
#	agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
#	agents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.py
Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@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

🧹 Nitpick comments (5)
agents/nemo-studio-copilot/skills/guardrails/SKILL.md (1)

12-14: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Add the workspace argument to the nemo_api guidance.

nemo_api requires a nonblank workspace. Otherwise it returns a clarification response instead of running the config CRUD or check.

🤖 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/skills/guardrails/SKILL.md` around lines 12 - 14,
Update the nemo_api guidance for both guardrail.configs CRUD and the guardrail
check action to require and pass a nonblank workspace argument, preserving the
existing resource and action usage.
agents/nemo-studio-copilot/skills/secrets/SKILL.md (1)

7-9: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Add the workspace argument to the nemo_api guidance.

The secret lifecycle calls need the active request workspace.

🤖 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/skills/secrets/SKILL.md` around lines 7 - 9, Add
the workspace argument to the nemo_api guidance for the secrets resource,
ensuring all create, retrieve, list, update, and delete actions pass the active
request workspace along with their JSON params.
agents/nemo-studio-copilot/skills/evaluator/SKILL.md (1)

14-16: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

check_status also requires workspace.

check_status returns a clarification response when workspace is missing. Add the active request workspace to both the nemo_api and check_status guidance.

🤖 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/skills/evaluator/SKILL.md` around lines 14 - 16,
Update the nemo_api and check_status guidance in the evaluator skill to require
and include the active request workspace for both metric operations/asynchronous
jobs and evaluation-job polling. Preserve the existing tool and operation
guidance while explicitly passing workspace in each usage.
agents/nemo-studio-copilot/skills/inference/SKILL.md (1)

14-15: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Add the workspace argument to the nemo_api guidance.

Secret and provider calls fail with a clarification response when workspace is absent.

🤖 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/skills/inference/SKILL.md` around lines 14 - 15,
Update the nemo_api guidance in SKILL.md to include the required workspace
argument for both the secrets API-key operation and the inference.providers CRUD
operations, preserving the existing resource names and usage guidance.
agents/nemo-studio-copilot/skills/entities/SKILL.md (1)

7-10: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

State the required workspace argument.

nemo_api returns "Clarification required: which workspace should this operation use?" when workspace is missing or blank. This skill instructs nemo_api usage without that argument. Add the active request workspace to the guidance.

♻️ Proposed edit
-- Use `nemo_api` with the `models` or `datasets` resource as appropriate.
+- Use `nemo_api` with the `models` or `datasets` resource as appropriate, and pass
+  `workspace="<active request workspace>"` on every 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/skills/entities/SKILL.md` around lines 7 - 10,
Update the nemo_api usage guidance in SKILL.md to require passing the active
request workspace through the workspace argument for every operation. Ensure the
argument is non-blank and retain the existing resource, entity-type, CRUD, and
JSON parameter instructions.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@agents/nemo-studio-copilot-spec/skills/auditor/SKILL.md`:
- Line 5: Update the top-level title after the YAML front matter in
agents/nemo-studio-copilot-spec/skills/auditor/SKILL.md:5,
agents/nemo-studio-copilot-spec/skills/entities/SKILL.md:5,
agents/nemo-studio-copilot-spec/skills/evaluator/SKILL.md:5,
agents/nemo-studio-copilot-spec/skills/files/SKILL.md:5,
agents/nemo-studio-copilot-spec/skills/guardrails/SKILL.md:5,
agents/nemo-studio-copilot-spec/skills/inference/SKILL.md:5, and
agents/nemo-studio-copilot-spec/skills/workspace/SKILL.md:5 by converting each
plain-text title into a level-one Markdown heading, preserving the existing
title text.
- Line 17: Add final-resource verification to the documented workflows: in
agents/nemo-studio-copilot-spec/skills/auditor/SKILL.md:17, retrieve or list the
final audit resource and compare required fields; in
agents/nemo-studio-copilot-spec/skills/entities/SKILL.md:9-10, verify every
required field of the final model or dataset; in
agents/nemo-studio-copilot-spec/skills/inference/SKILL.md:7-16, verify the final
provider’s host URL and description; and apply the same audit-resource
verification in agents/nemo-studio-copilot/skills/auditor/SKILL.md:17.

In `@agents/nemo-studio-copilot-spec/skills/secrets/SKILL.md`:
- Around line 7-10: Update the secrets skill instructions around the nemo_api
lifecycle to pass secret references instead of raw secret values in JSON params,
accounting for approval_prompt and _serialize trace exposure. Explicitly
prohibit printing or echoing secret values during create, retrieve, list,
update, and delete verification while preserving the required temporary-secret
lifecycle and final verification-secret creation.

In `@agents/nemo-studio-copilot/skills/entities/SKILL.md`:
- Around line 7-10: Update the nemo_api and check_status call instructions to
always include workspace="<active request workspace>". In
agents/nemo-studio-copilot/skills/entities/SKILL.md lines 7-10, add it to models
and datasets calls; in agents/nemo-studio-copilot/skills/evaluator/SKILL.md
lines 14-16, add it to evaluation.metrics, evaluation.metric_jobs, and
check_status; in agents/nemo-studio-copilot/skills/guardrails/SKILL.md lines
12-14, add it to guardrail.configs CRUD and guardrail checks; in
agents/nemo-studio-copilot/skills/inference/SKILL.md lines 14-15, add it to
secrets and inference.providers; and in
agents/nemo-studio-copilot/skills/secrets/SKILL.md lines 7-9, add it to every
secret lifecycle call.

In `@agents/nemo-studio-copilot/skills/files/SKILL.md`:
- Around line 28-31: Update the retry guidance in both
agents/nemo-studio-copilot/skills/files/SKILL.md:28-31 and
agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md:28-31
to require server-side idempotency or operation-status tracking before retrying
a timed-out mutation; a negative read-back alone must not permit retry. Preserve
the rule to continue only after confirming the intended state, otherwise stop
and report unknown commit status.

In `@agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py`:
- Around line 195-225: Validate the approved overrides in the mutation-approval
flow before calling string methods or resolving the SDK method. In the block
handling approved_input, explicitly reject non-string resource or action values
with a clear validation error, then continue using resource and action only
after validation; preserve the existing workspace and params validation
behavior.
- Around line 373-392: Update check_status dispatch to use each documented
service’s API: call evaluator and data_designer
get_job_resource(job_name).get_job_status(), call auditor
get_job(job_name).get_job_status(), and call
customization.<backend>.jobs.get_job_resource(job_name).get_status() without a
name argument. Preserve JSON serialization, fallback/error reporting, and
workspace validation while replacing the generic sub-resource probing.

---

Nitpick comments:
In `@agents/nemo-studio-copilot/skills/entities/SKILL.md`:
- Around line 7-10: Update the nemo_api usage guidance in SKILL.md to require
passing the active request workspace through the workspace argument for every
operation. Ensure the argument is non-blank and retain the existing resource,
entity-type, CRUD, and JSON parameter instructions.

In `@agents/nemo-studio-copilot/skills/evaluator/SKILL.md`:
- Around line 14-16: Update the nemo_api and check_status guidance in the
evaluator skill to require and include the active request workspace for both
metric operations/asynchronous jobs and evaluation-job polling. Preserve the
existing tool and operation guidance while explicitly passing workspace in each
usage.

In `@agents/nemo-studio-copilot/skills/guardrails/SKILL.md`:
- Around line 12-14: Update the nemo_api guidance for both guardrail.configs
CRUD and the guardrail check action to require and pass a nonblank workspace
argument, preserving the existing resource and action usage.

In `@agents/nemo-studio-copilot/skills/inference/SKILL.md`:
- Around line 14-15: Update the nemo_api guidance in SKILL.md to include the
required workspace argument for both the secrets API-key operation and the
inference.providers CRUD operations, preserving the existing resource names and
usage guidance.

In `@agents/nemo-studio-copilot/skills/secrets/SKILL.md`:
- Around line 7-9: Add the workspace argument to the nemo_api guidance for the
secrets resource, ensuring all create, retrieve, list, update, and delete
actions pass the active request workspace along with their JSON params.
🪄 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: 3f97d7bf-2749-453f-8fe0-3ffeff05e081

📥 Commits

Reviewing files that changed from the base of the PR and between 1c2e9d6 and 55d2849.

⛔ Files ignored due to path filters (2)
  • agents/nemo-studio-copilot/uv.lock is excluded by !**/*.lock
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (39)
  • agents/nemo-studio-copilot-spec/AGENT-SPEC.md
  • agents/nemo-studio-copilot-spec/agent.yaml
  • agents/nemo-studio-copilot-spec/skills/auditor/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/entities/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/files/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/guardrails/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/inference/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/secrets/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot/.dockerignore
  • agents/nemo-studio-copilot/Dockerfile
  • agents/nemo-studio-copilot/Dockerfile.fabric-local
  • agents/nemo-studio-copilot/agent.yaml
  • agents/nemo-studio-copilot/constraints.fabric-local.txt
  • agents/nemo-studio-copilot/pyproject.toml
  • agents/nemo-studio-copilot/skills/auditor/SKILL.md
  • agents/nemo-studio-copilot/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-copilot/skills/entities/SKILL.md
  • agents/nemo-studio-copilot/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot/skills/files/SKILL.md
  • agents/nemo-studio-copilot/skills/guardrails/SKILL.md
  • agents/nemo-studio-copilot/skills/inference/SKILL.md
  • agents/nemo-studio-copilot/skills/secrets/SKILL.md
  • agents/nemo-studio-copilot/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/mcp_server.py
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/benchmark-execution/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.py
  • agents/nemo-studio-copilot/tests/smoke_test.md
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
  • pytest.ini
💤 Files with no reviewable changes (6)
  • agents/nemo-studio-copilot/.dockerignore
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot-eval.yml
  • agents/nemo-studio-copilot/Dockerfile
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.remote.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/nemo-studio-copilot.yml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/wrapper.py
🚧 Files skipped from review as they are similar to previous changes (10)
  • agents/nemo-studio-copilot-spec/agent.yaml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot/constraints.fabric-local.txt
  • agents/nemo-studio-copilot/agent.yaml
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/mcp_server.py
  • agents/nemo-studio-copilot/Dockerfile.fabric-local
  • pytest.ini
  • agents/nemo-studio-copilot/pyproject.toml
  • agents/nemo-studio-copilot-spec/AGENT-SPEC.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md

Comment thread agents/nemo-studio-copilot-spec/skills/auditor/SKILL.md Outdated
Comment thread agents/nemo-studio-copilot-spec/skills/auditor/SKILL.md
Comment thread agents/nemo-studio-copilot-spec/skills/secrets/SKILL.md Outdated
Comment thread agents/nemo-studio-copilot/skills/entities/SKILL.md Outdated
Comment thread agents/nemo-studio-copilot/skills/files/SKILL.md Outdated
Comment thread agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
Comment thread agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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-spec/skills/secrets/SKILL.md`:
- Around line 7-13: Update the secrets guidance in
agents/nemo-studio-copilot-spec/skills/secrets/SKILL.md:7-13 and
agents/nemo-studio-copilot/skills/secrets/SKILL.md:7-13 to require
studio_session_id in JSON params for nemo_api create, update, and delete
mutations; keep retrieve and list unchanged, and preserve the existing
prohibition on exposing resolved secret values.
🪄 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: d996ee78-e2d5-4a22-83e0-665387ce1c68

📥 Commits

Reviewing files that changed from the base of the PR and between 55d2849 and b6f2288.

📒 Files selected for processing (19)
  • agents/nemo-studio-copilot-spec/skills/auditor/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/entities/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/files/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/guardrails/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/inference/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/secrets/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot/skills/auditor/SKILL.md
  • agents/nemo-studio-copilot/skills/entities/SKILL.md
  • agents/nemo-studio-copilot/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot/skills/files/SKILL.md
  • agents/nemo-studio-copilot/skills/guardrails/SKILL.md
  • agents/nemo-studio-copilot/skills/inference/SKILL.md
  • agents/nemo-studio-copilot/skills/secrets/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/register.py
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
🚧 Files skipped from review as they are similar to previous changes (15)
  • agents/nemo-studio-copilot/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/auditor/SKILL.md
  • agents/nemo-studio-copilot/skills/inference/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/guardrails/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/entities/SKILL.md
  • agents/nemo-studio-copilot/skills/auditor/SKILL.md
  • agents/nemo-studio-copilot/skills/guardrails/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/workspace/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/inference/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot/skills/entities/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/files/SKILL.md
  • agents/nemo-studio-copilot-spec/skills/evaluator/SKILL.md
  • agents/nemo-studio-copilot/skills/files/SKILL.md
  • agents/nemo-studio-copilot/src/nemo_studio_copilot/skills/files/SKILL.md

Comment thread agents/nemo-studio-copilot-spec/skills/secrets/SKILL.md
Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 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/tests/test_nemo_studio_copilot.py`:
- Around line 66-69: Update the MCP URL assertion in test_nemo_studio_copilot to
read from translated.mcp.servers["nemo_studio"].url instead of config, ensuring
the test validates the translated MCP configuration while preserving the
existing expected URL.

In `@plugins/nemo-agents/src/nemo_agents_plugin/fabric/translator.py`:
- Around line 38-41: Update test_selected_harness_uses_default_model to clear
NEMO_BASE_URL, NMP_BASE_URL, and NMP_WORKSPACE before asserting the exact
runtime_env mapping, preventing values forwarded by _platform_runtime_env from
affecting the test.
🪄 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: 3c265c58-b68f-469e-8a5c-2f2eb255923c

📥 Commits

Reviewing files that changed from the base of the PR and between b6f2288 and 81d5d16.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (7)
  • agents/nemo-studio-copilot-spec/agent.yaml
  • agents/nemo-studio-copilot/Dockerfile.fabric-local
  • agents/nemo-studio-copilot/agent.yaml
  • agents/nemo-studio-copilot/constraints.fabric-local.txt
  • agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py
  • plugins/nemo-agents/src/nemo_agents_plugin/fabric/translator.py
  • plugins/nemo-agents/tests/unit/test_fabric_translator.py
🚧 Files skipped from review as they are similar to previous changes (4)
  • agents/nemo-studio-copilot/agent.yaml
  • agents/nemo-studio-copilot/constraints.fabric-local.txt
  • agents/nemo-studio-copilot-spec/agent.yaml
  • agents/nemo-studio-copilot/Dockerfile.fabric-local

Comment thread agents/nemo-studio-copilot/tests/test_nemo_studio_copilot.py Outdated
Comment thread plugins/nemo-agents/src/nemo_agents_plugin/fabric/translator.py
Signed-off-by: Danielle Ali <44468613+dmariali@users.noreply.github.com>
@dmariali
dmariali added this pull request to the merge queue Aug 12, 2026
Merged via the queue into main with commit 7853a31 Aug 12, 2026
54 checks passed
@dmariali
dmariali deleted the switch-copilot-from-nat-to-pilot branch August 12, 2026 14:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants