feat(studio): Studio Customizer UI updates - #574
Conversation
📝 WalkthroughWalkthroughThis PR reworks the customizer job data model to a backend-discriminated (Automodel/Unsloth) spec architecture across the SDK, hooks, mocks, and UI panels; removes the legacy in-app new-customization form/route in favor of a Claude Code Agent guided flow; and adds SSE permission/input expiration handling end-to-end (backend, runtime, UI). ChangesCustomizer Job Model Migration & Fine-Tune Flow
Agent Decision/Blocking Input & SSE Expiration
Sequence Diagram(s)sequenceDiagram
participant CodingAgentsService
participant SSEStream
participant ClaudeCodeApi
participant ChatRuntime
CodingAgentsService->>SSEStream: enqueue permission_expired/input_expired
SSEStream->>ClaudeCodeApi: handleSseEvent
ClaudeCodeApi->>ChatRuntime: onPermissionExpired/onInputExpired(requestId)
ChatRuntime->>ChatRuntime: dispatch expire_permission/expire_input
sequenceDiagram
participant CustomizationJobDetailsRoute
participant useCustomizationJob
participant PlatformJobsAPI
participant DetailActions
participant CancelMutation
CustomizationJobDetailsRoute->>useCustomizationJob: fetch(workspace, name)
useCustomizationJob->>PlatformJobsAPI: useJobsGetJob
PlatformJobsAPI-->>useCustomizationJob: job spec
useCustomizationJob-->>CustomizationJobDetailsRoute: job, backend
CustomizationJobDetailsRoute->>DetailActions: render(backend, name, status)
DetailActions->>CancelMutation: mutateAsync({workspace, backend, name})
Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
⚔️ Resolve merge conflicts
Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (6)
web/packages/common/src/components/TrainingParameterSlider/types.ts (1)
9-10: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueStale "
@deprecated" comment after schema removal.Comment still says "Prefer using a zod schema instead" but the zod schemas this file used to export were just deleted in this change. Update or remove the note so it doesn't mislead future readers.
🤖 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/common/src/components/TrainingParameterSlider/types.ts` around lines 9 - 10, The `@deprecated` note in TrainingParameterSlider/types.ts is now stale because the zod schemas it referenced were removed in this change. Update the deprecated comment on the relevant type export to remove the “Prefer using a zod schema instead” guidance or replace it with an accurate deprecation note, so the symbol no longer points readers to something that no longer exists.web/packages/studio/src/routes/DashboardLandingRoute/skillActionTemplateCatalog.tsx (1)
93-100: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueNew
nemo-customizeroverlaps with existingnemo-fine-tuneentry.Both gated by
customizerEnabled;nemo-fine-tune("Check fine-tuning status") andnemo-customizer("Fine-tune a model") cover adjacent scope. If intentional (launch vs. status-check), fine — otherwise consider consolidating to avoid ambiguous routing between the two skills.🤖 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/DashboardLandingRoute/skillActionTemplateCatalog.tsx` around lines 93 - 100, The new nemo-customizer entry overlaps with the existing nemo-fine-tune catalog item because both use customizerEnabled and target similar customizer workflows. Review the skill definitions in skillActionTemplateCatalog and either consolidate them into one route or make their prompts/titles/actions clearly distinct so navigation does not become ambiguous between launching customization and checking fine-tuning status.web/packages/studio/src/routes/CustomizationJobDetailsRoute/index.tsx (1)
49-49: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value
output_modelshould be camelCase.Rename to
outputModelto match convention (used at lines 50, 53, 67, 101).As per coding guidelines, "Use camelCase for variables, functions, and methods."
🤖 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/CustomizationJobDetailsRoute/index.tsx` at line 49, Rename the local variable output_model in CustomizationJobDetailsRoute to outputModel to follow camelCase conventions and match the surrounding usage in the same component; update any references in the route logic so the renamed symbol is used consistently throughout the file.Source: Coding guidelines
web/packages/studio/src/routes/CustomizationJobDetailsRoute/DetailActions.test.tsx (1)
26-49: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winMissing test for undefined-
backendcancel path.
DetailActions.tsxnow guardscancelJobwithif (!backend) { toast.error(...); return; }, but no test exercisesbackend={undefined}.🤖 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/CustomizationJobDetailsRoute/DetailActions.test.tsx` around lines 26 - 49, Add a test in DetailActions.test.tsx that renders DetailActions with a cancellable status and backend set to undefined, then verifies the Cancel Job action triggers the missing-backend path instead of proceeding. Use the existing DetailActions component and cancel flow to assert the toast.error behavior (or equivalent user-visible fallback) when cancelJob hits the new backend guard.web/packages/sdk/vendored/customizer/api.ts (1)
17-21: 📐 Maintainability & Code Quality | 🔵 TrivialRelative imports violate no-relative-import guideline.
Same issue as schema.ts —
'../../generated/fetchers/platform','../../generated/platform/schema','./schema'should use@nemo/sdk/...alias paths.As per coding guidelines, "Never use relative imports. Always use absolute alias paths ... even for sibling files in the same directory."
🤖 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/sdk/vendored/customizer/api.ts` around lines 17 - 21, The imports in the customizer API module still use relative paths, which violates the no-relative-import guideline. Update the import statements in the customizer/api.ts module to use the `@nemo/sdk` alias paths instead of '../../generated/fetchers/platform', '../../generated/platform/schema', and './schema'. Make sure the symbols customFetch, ErrorType, HTTPValidationError, CustomizationBackend, and CustomizationJob are preserved while switching to absolute alias imports.Source: Coding guidelines
web/packages/sdk/vendored/customizer/schema.ts (1)
35-360: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winMark job-spec interfaces
readonly.Header states these are "READ-ONLY types for the job details page," but none of the new interfaces mark fields
readonly, so nothing prevents accidental mutation downstream (e.g. spreading and overwriting fields).As per coding guidelines, "Use
readonlyfor immutable properties in TypeScript interfaces and types."🤖 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/sdk/vendored/customizer/schema.ts` around lines 35 - 360, The new job-spec types are meant to be read-only, but the interfaces still allow mutation. Update the job detail schema types such as OutputResponse, AutomodelJobSpec, UnslothJobSpec, BaseJob, and the nested spec interfaces they reference (for example AutomodelTrainingSpec, UnslothDatasetSpec, HardwareSpec, etc.) to use readonly properties so consumers cannot accidentally overwrite job details. Keep the existing type structure and discriminators like isAutomodelSpec, isUnslothSpec, and getCustomizationBackend unchanged except for readonly-safe typing.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 `@web/packages/sdk/vendored/customizer/schema.ts`:
- Around line 11-13: The import in the customizer schema re-exports should use
the SDK alias instead of a relative path to comply with the no-relative-import
rule. Update the import and re-export in the schema file that references
PlatformJobStatus, PaginationData, and SecretRef so it pulls from
`@nemo/sdk/generated/platform/schema` rather than
'../../generated/platform/schema', keeping the existing type names and export
structure intact.
In
`@web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.ts`:
- Around line 333-365: The `expire_permission` and `expire_input` handling in
`useClaudeCodeChatRuntime` can let stale submit failures overwrite the next
active item’s status. Thread `requestId` through `set_decision_status` and
`set_input_status`, and in the reducer only apply those status updates when the
action’s `requestId` matches `activePermission.requestId` or
`activeInput.requestId`. Also make sure the submit-failure paths that dispatch
these actions pass along the originating request identifier.
- Around line 566-573: Queued permission and input expirations are being dropped
silently in ClaudeCodeChatRuntime, so add a user-facing expiration notice when
onPermissionExpired or onInputExpired fires in useClaudeCodeChatRuntime. Update
the expire_permission and expire_input handling path to trigger a toast or
inline message that names the expired request so users know their response was
discarded, while still guarding with signal.aborted and isCurrentRun() as today.
---
Nitpick comments:
In `@web/packages/common/src/components/TrainingParameterSlider/types.ts`:
- Around line 9-10: The `@deprecated` note in TrainingParameterSlider/types.ts is
now stale because the zod schemas it referenced were removed in this change.
Update the deprecated comment on the relevant type export to remove the “Prefer
using a zod schema instead” guidance or replace it with an accurate deprecation
note, so the symbol no longer points readers to something that no longer exists.
In `@web/packages/sdk/vendored/customizer/api.ts`:
- Around line 17-21: The imports in the customizer API module still use relative
paths, which violates the no-relative-import guideline. Update the import
statements in the customizer/api.ts module to use the `@nemo/sdk` alias paths
instead of '../../generated/fetchers/platform',
'../../generated/platform/schema', and './schema'. Make sure the symbols
customFetch, ErrorType, HTTPValidationError, CustomizationBackend, and
CustomizationJob are preserved while switching to absolute alias imports.
In `@web/packages/sdk/vendored/customizer/schema.ts`:
- Around line 35-360: The new job-spec types are meant to be read-only, but the
interfaces still allow mutation. Update the job detail schema types such as
OutputResponse, AutomodelJobSpec, UnslothJobSpec, BaseJob, and the nested spec
interfaces they reference (for example AutomodelTrainingSpec,
UnslothDatasetSpec, HardwareSpec, etc.) to use readonly properties so consumers
cannot accidentally overwrite job details. Keep the existing type structure and
discriminators like isAutomodelSpec, isUnslothSpec, and getCustomizationBackend
unchanged except for readonly-safe typing.
In
`@web/packages/studio/src/routes/CustomizationJobDetailsRoute/DetailActions.test.tsx`:
- Around line 26-49: Add a test in DetailActions.test.tsx that renders
DetailActions with a cancellable status and backend set to undefined, then
verifies the Cancel Job action triggers the missing-backend path instead of
proceeding. Use the existing DetailActions component and cancel flow to assert
the toast.error behavior (or equivalent user-visible fallback) when cancelJob
hits the new backend guard.
In `@web/packages/studio/src/routes/CustomizationJobDetailsRoute/index.tsx`:
- Line 49: Rename the local variable output_model in
CustomizationJobDetailsRoute to outputModel to follow camelCase conventions and
match the surrounding usage in the same component; update any references in the
route logic so the renamed symbol is used consistently throughout the file.
In
`@web/packages/studio/src/routes/DashboardLandingRoute/skillActionTemplateCatalog.tsx`:
- Around line 93-100: The new nemo-customizer entry overlaps with the existing
nemo-fine-tune catalog item because both use customizerEnabled and target
similar customizer workflows. Review the skill definitions in
skillActionTemplateCatalog and either consolidate them into one route or make
their prompts/titles/actions clearly distinct so navigation does not become
ambiguous between launching customization and checking fine-tuning status.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: e7f7cb61-53bf-404a-9ad6-a3783d028b8a
📒 Files selected for processing (92)
services/studio/src/nmp/studio/coding_agents.pyweb/packages/common/src/components/TrainingParameterSlider/types.tsweb/packages/sdk/vendored/customizer/api.tsweb/packages/sdk/vendored/customizer/schema.tsweb/packages/sdk/vendored/customizer/zod.tsweb/packages/studio/e2e-tests/api/customizations.tsweb/packages/studio/e2e-tests/customization.test.tsweb/packages/studio/e2e-tests/pages/project-customizations.tsweb/packages/studio/e2e-tests/utils/fixtures.tsweb/packages/studio/src/components/CustomizationDetailsPanel/index.test.tsxweb/packages/studio/src/components/CustomizationDetailsPanel/index.tsxweb/packages/studio/src/components/CustomizationMetrics/CustomizationMetricLineGraph/index.tsxweb/packages/studio/src/components/CustomizationMetrics/index.test.tsxweb/packages/studio/src/components/CustomizationMetrics/index.tsxweb/packages/studio/src/components/CustomizeModelModal/constants.tsweb/packages/studio/src/components/CustomizeModelModal/index.test.tsxweb/packages/studio/src/components/CustomizeModelModal/index.tsxweb/packages/studio/src/components/NewCustomizationForm/FormSection.test.tsxweb/packages/studio/src/components/NewCustomizationForm/FormSection.tsxweb/packages/studio/src/components/NewCustomizationForm/ModelSelectionSection.test.tsxweb/packages/studio/src/components/NewCustomizationForm/ModelSelectionSection.tsxweb/packages/studio/src/components/NewCustomizationForm/ParameterEfficiency.test.tsxweb/packages/studio/src/components/NewCustomizationForm/ParameterEfficiency.tsxweb/packages/studio/src/components/NewCustomizationForm/TrainingMethodSelect.test.tsxweb/packages/studio/src/components/NewCustomizationForm/TrainingMethodSelect.tsxweb/packages/studio/src/components/NewCustomizationForm/constants.tsweb/packages/studio/src/components/NewCustomizationForm/index.tsxweb/packages/studio/src/components/NewCustomizationForm/utils.test.tsweb/packages/studio/src/components/NewCustomizationForm/utils.tsweb/packages/studio/src/components/agents/AgentBlockingInput/FilesetFileBlockingInput.tsxweb/packages/studio/src/components/agents/AgentDecisionInput/index.test.tsxweb/packages/studio/src/components/agents/AgentDecisionInput/index.tsxweb/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/AutoSplitNotice.test.tsxweb/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/AutoSplitNotice.tsxweb/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/ChecklistRow.tsxweb/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/PatternsTooltip.tsxweb/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/SchemaBlock.tsxweb/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/index.test.tsxweb/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/index.tsxweb/packages/studio/src/components/customizer/CustomizationFilesetSelect/index.test.tsxweb/packages/studio/src/components/customizer/CustomizationFilesetSelect/index.tsxweb/packages/studio/src/components/customizer/CustomizationHyperparameters/ComputeResources.test.tsxweb/packages/studio/src/components/customizer/CustomizationHyperparameters/ComputeResources.tsxweb/packages/studio/src/components/customizer/CustomizationHyperparameters/DpoParameters.test.tsxweb/packages/studio/src/components/customizer/CustomizationHyperparameters/DpoParameters.tsxweb/packages/studio/src/components/customizer/CustomizationHyperparameters/GeneralParameters.test.tsxweb/packages/studio/src/components/customizer/CustomizationHyperparameters/GeneralParameters.tsxweb/packages/studio/src/components/customizer/CustomizationHyperparameters/LoraParameters.test.tsxweb/packages/studio/src/components/customizer/CustomizationHyperparameters/LoraParameters.tsxweb/packages/studio/src/components/customizer/CustomizationHyperparameters/index.tsxweb/packages/studio/src/components/customizer/utils.tsweb/packages/studio/src/components/dataViews/CustomModelsDataView/CustomizeModelButton/index.test.tsxweb/packages/studio/src/components/dataViews/CustomModelsDataView/KindTag.stories.tsxweb/packages/studio/src/components/dataViews/CustomModelsDataView/KindTag.tsxweb/packages/studio/src/components/dataViews/CustomModelsDataView/constants.tsweb/packages/studio/src/components/sidePanels/CustomizationConfigSidePanel/index.test.tsxweb/packages/studio/src/components/sidePanels/CustomizationConfigSidePanel/index.tsxweb/packages/studio/src/constants/routes.tsweb/packages/studio/src/hooks/useCustomizationDatasetValidation/encodingQuery.tsweb/packages/studio/src/hooks/useCustomizationDatasetValidation/index.test.tsxweb/packages/studio/src/hooks/useCustomizationDatasetValidation/index.tsweb/packages/studio/src/hooks/useCustomizationJob/index.tsweb/packages/studio/src/mocks/customizer/customization-jobs.tsweb/packages/studio/src/mocks/customizer/metrics.tsweb/packages/studio/src/mocks/handlers/customizer.tsweb/packages/studio/src/routes/CustomizationJobDetailsRoute/DetailActions.test.tsxweb/packages/studio/src/routes/CustomizationJobDetailsRoute/DetailActions.tsxweb/packages/studio/src/routes/CustomizationJobDetailsRoute/index.test.tsxweb/packages/studio/src/routes/CustomizationJobDetailsRoute/index.tsxweb/packages/studio/src/routes/DashboardLandingRoute/skillActionTemplateCatalog.tsxweb/packages/studio/src/routes/NewCustomizationRoute/index.test.tsxweb/packages/studio/src/routes/NewCustomizationRoute/index.tsxweb/packages/studio/src/routes/NewCustomizationRoute/util.tsweb/packages/studio/src/routes/WorkspaceDashboardRoute/index.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/ClaudeCodeChatThread.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.test.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/api.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.test.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/index.tsxweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/studioUiNavigationSuggestions.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/types.tsweb/packages/studio/src/routes/agents/ClaudeCodeChatRoute/useClaudeCodeChatRuntime.tsweb/packages/studio/src/routes/groups/customizationRoutes.tsxweb/packages/studio/src/routes/index.test.tsxweb/packages/studio/src/routes/utils.tsweb/packages/studio/src/tests/create-a-customization.test.tsxweb/packages/studio/src/util/customizations.test.tsweb/packages/studio/src/util/customizations.tsxweb/packages/studio/src/util/customizerSchema.test.tsweb/packages/studio/src/util/customizerSchema.tsweb/packages/studio/src/util/forms/customization.test.tsweb/packages/studio/src/util/forms/customization.ts
💤 Files with no reviewable changes (55)
- web/packages/studio/src/components/customizer/CustomizationHyperparameters/GeneralParameters.test.tsx
- web/packages/studio/src/components/NewCustomizationForm/TrainingMethodSelect.tsx
- web/packages/studio/src/components/customizer/CustomizationHyperparameters/ComputeResources.test.tsx
- web/packages/studio/src/components/customizer/CustomizationHyperparameters/LoraParameters.tsx
- web/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/PatternsTooltip.tsx
- web/packages/studio/src/components/customizer/CustomizationHyperparameters/ComputeResources.tsx
- web/packages/studio/src/components/customizer/CustomizationHyperparameters/LoraParameters.test.tsx
- web/packages/studio/src/components/NewCustomizationForm/ModelSelectionSection.test.tsx
- web/packages/studio/src/components/NewCustomizationForm/TrainingMethodSelect.test.tsx
- web/packages/studio/src/components/customizer/CustomizationHyperparameters/DpoParameters.test.tsx
- web/packages/studio/src/components/customizer/CustomizationHyperparameters/GeneralParameters.tsx
- web/packages/studio/e2e-tests/pages/project-customizations.ts
- web/packages/studio/src/components/NewCustomizationForm/ParameterEfficiency.test.tsx
- web/packages/studio/src/components/customizer/CustomizationHyperparameters/index.tsx
- web/packages/studio/src/components/NewCustomizationForm/FormSection.tsx
- web/packages/studio/src/components/NewCustomizationForm/FormSection.test.tsx
- web/packages/studio/src/components/CustomizationMetrics/index.test.tsx
- web/packages/studio/src/components/NewCustomizationForm/ParameterEfficiency.tsx
- web/packages/studio/src/components/customizer/utils.ts
- web/packages/studio/src/routes/NewCustomizationRoute/util.ts
- web/packages/studio/src/components/NewCustomizationForm/utils.test.ts
- web/packages/studio/src/components/NewCustomizationForm/utils.ts
- web/packages/studio/src/util/customizerSchema.test.ts
- web/packages/studio/src/hooks/useCustomizationDatasetValidation/encodingQuery.ts
- web/packages/studio/src/components/CustomizationMetrics/index.tsx
- web/packages/studio/src/components/CustomizationMetrics/CustomizationMetricLineGraph/index.tsx
- web/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/ChecklistRow.tsx
- web/packages/studio/e2e-tests/api/customizations.ts
- web/packages/studio/src/tests/create-a-customization.test.tsx
- web/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/SchemaBlock.tsx
- web/packages/studio/src/routes/index.test.tsx
- web/packages/studio/src/components/customizer/CustomizationHyperparameters/DpoParameters.tsx
- web/packages/studio/e2e-tests/customization.test.ts
- web/packages/studio/src/util/forms/customization.ts
- web/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/index.tsx
- web/packages/studio/src/util/forms/customization.test.ts
- web/packages/studio/src/components/NewCustomizationForm/ModelSelectionSection.tsx
- web/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/index.test.tsx
- web/packages/studio/src/routes/NewCustomizationRoute/index.test.tsx
- web/packages/studio/src/components/customizer/CustomizationFilesetSelect/index.test.tsx
- web/packages/studio/src/components/customizer/CustomizationFilesetSelect/index.tsx
- web/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/AutoSplitNotice.tsx
- web/packages/studio/src/components/customizer/CustomizationFilesetSelect/FileValidationPanel/AutoSplitNotice.test.tsx
- web/packages/studio/src/hooks/useCustomizationDatasetValidation/index.ts
- web/packages/studio/src/routes/NewCustomizationRoute/index.tsx
- web/packages/studio/src/components/NewCustomizationForm/index.tsx
- web/packages/studio/src/hooks/useCustomizationDatasetValidation/index.test.tsx
- web/packages/studio/src/mocks/customizer/metrics.ts
- web/packages/studio/src/constants/routes.ts
- web/packages/studio/src/components/NewCustomizationForm/constants.ts
- web/packages/studio/src/util/customizerSchema.ts
- web/packages/studio/e2e-tests/utils/fixtures.ts
- web/packages/studio/src/routes/agents/ClaudeCodeChatRoute/studioUiNavigationSuggestions.ts
- web/packages/studio/src/routes/groups/customizationRoutes.tsx
- web/packages/studio/src/routes/utils.ts
1c53e8b to
ad881d4
Compare
Signed-off-by: Henrique Tolentino <htolentino@nvidia.com>
ad881d4 to
513322f
Compare
|
Signed-off-by: Henrique Tolentino <htolentino@nvidia.com>
Summary by CodeRabbit
New Features
Bug Fixes