Skip to content

[release] v0.99.6#4304

Merged
bekossy merged 68 commits into
mainfrom
release/v0.99.6
May 11, 2026
Merged

[release] v0.99.6#4304
bekossy merged 68 commits into
mainfrom
release/v0.99.6

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

New version v0.99.6 in

  • (web)
  • web/oss
  • web/ee
  • clients/typescript
  • clients/python
  • sdks/python
  • api
  • services

ardaerzin and others added 30 commits April 28, 2026 11:48
…e selection to new prompt flow

- Remove "Custom workflow" option from CreateAppDropdown; custom workflows now only accessible via "Set up workflow" in prompts page
- Add Chat/Completion submenu to "New prompt" action in breadcrumb and table section menus
- Update CreateAppDropdown layout to include app type icons and improve visual alignment
- Enable mask-based close for app-create drawer context (blurred backdrop)
- Fix callback
Adds PRD, RFC, and README to docs/designs/testset-annotation-queue/.

The design covers:
- Per-scenario "Add to Testset" button in the annotate tab
- "Done with queue" screen supporting both trace and testcase queues
- All-annotations tab with row selection and upgraded commit modal
- New AddToTestsetModal component with EntityPicker integration
- Controller actions for addScenariosToTestset (trace + testcase paths)
- Default target testset heuristics and last-used persistence

https://claude.ai/code/session_01B2uQKidAr1KJ4CR9sroY2H
Key corrections:
- Replace new AddToTestsetModal with EntityCommitModal + renderModeContent
- Replace useState for selected testset with pendingTestsetSelectionAtom
  in annotationSessionController — survives re-renders and can be read
  imperatively by addScenariosToTestset without closure capture
- selectedScenarioIdsAtom for row selection (also atom, not useState)
- openAddToTestsetModal seeds pendingTestsetSelectionAtom from default
- addScenariosToTestset reads target testset from atom, not payload
- Add state atom summary table documenting all atom lifecycles

https://claude.ai/code/session_01B2uQKidAr1KJ4CR9sroY2H
Inputs (agData.inputs) spread into N columns — one per input key.
Outputs (agData.outputs) always map to a single "output" column
regardless of value shape, matching extractOutputs() behaviour in
trace/utils/selectors.ts which treats outputs as a leaf.
Annotation values add one column per evaluator slug.
…n reset

1. Trace annotation resolution: use scenarioAnnotationsAtomFamily(scenarioId)
   not a raw query by traceId. The atom handles step-based resolution to avoid
   cross-queue bleed (as documented in the controller).

2. Scope label when scope="all": addToTestsetScenarioIds() is empty for the
   "all" case — read actual count from scenarioIds() instead of falling back
   to the "all" string.

3. Row selection reset: addScenariosToTestset clears selectedScenarioIdsAtom
   after a successful export so stale selections don't persist.
- Make CreateAppDropdown options keyboard-accessible (button + focus ring).
- Drop unused MaxAppModal state on the app-management page.
- Stop double-navigating on app-create commit: drawer wrapper owns the
  router.push, callers no longer pass an onWorkflowCreated handler.
- Capture the last open entity id before close clears it so
  useDrawerCloseCleanup actually discards orphan local-* entities.
- Build the fallback workflow URI from the requested type rather than
  the raw catalog key (avoids invalid SERVICE:* builtin URIs).
- Persist cleared app-create names instead of silently keeping the old
  one when the user blanks the input.
- Suppress the duplicate "App/Evaluator created successfully" toast in
  EntityCommitModal for ephemeral flows; the drawer wrapper already
  toasts on onNewRevision.

UX:
- Onboarding "Create a prompt" now opens a CreateAppTypeModal with
  Chat / Completion as equal-weight choices instead of defaulting to
  Chat. Apps-table dropdown remains compact for repeat users.
- Default names changed to "Chat prompt" / "Completion prompt".
@vercel
Copy link
Copy Markdown

vercel Bot commented May 10, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
agenta-documentation Error Error May 11, 2026 2:14pm

Request Review

@dosubot dosubot Bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label May 10, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 10, 2026

Review Change Stack

📝 Walkthrough

Summary by CodeRabbit

Release Notes

  • New Features

    • Added "Add to Testset" functionality in annotation sessions for exporting annotated scenarios.
    • Implemented drawer-based app creation interface for improved workflow.
    • Enhanced navigation between annotation queues and testsets.
  • Improvements

    • Refined message and JSON preview rendering in trace views.
    • Updated input validation for application names and slugs.
    • Improved annotation column organization and display.
  • Version Updates

    • Bumped all packages to version 0.99.6.

Walkthrough

Bumps many package versions to 0.99.6, adds an Add-to-Testset export flow (controller, UI, background job), centralizes JSON view-mode defaults, extracts trace message panels, adds trace-input display and export builders, and adds cell-renderer preview/beautified JSON utilities.

Changes

Main Change DAG

Layer / File(s) Summary
State / Testset model
web/packages/agenta-annotation/src/state/testsetSync.ts (buildTraceTestsetRows, buildTestcaseExportRows, getTestsetSyncEvaluatorColumnKey)
Switch TestsetSyncRow to nested data, add builders and evaluator-column helpers.
Annotation controller & export orchestration
web/packages/agenta-annotation/src/state/controllers/annotationSessionController.ts
Add add-to-testset atoms/selectors/actions, export-job orchestration, row preparation, and cache invalidation/refetch/merge logic.
Trace input display helpers
web/packages/agenta-annotation/src/state/traceInputDisplay.ts, web/packages/agenta-annotation/src/state/index.ts
Add getTraceInputDisplayValue/getTraceInputDisplayKeys and re-export them for rendering/CSV export.
annotationFormController
web/packages/agenta-annotation/src/state/controllers/annotationFormController.ts
Broaden edits-clear condition and pass submittedAnnotations into cache invalidation.
Entities / Testset API
web/packages/agenta-entities/src/testset/api/api.ts, mutations.ts
Add fetchLatestRevisionWithTestcases, optional testcaseLimit, and optional testsetVariantId in commitRevision payload.
Trace overview panels
web/oss/src/components/.../messagePanels.ts, OverviewTabItem/index.tsx
New prepareTraceOverviewPanels extracts/dedupes message groups and merges residual data; OverviewTabItem now delegates to it.
JSON view-mode helper & docs
web/oss/src/components/DrillInView/viewModes.ts, TraceSpanDrillInView.tsx, VIEW_MODES.md
Add getDefaultJsonViewMode and migrate components/docs to prefer beautified-json when available.
Annotation session UI & wiring
web/packages/agenta-annotation-ui/src/components/AnnotationSession/*
Refactor session into subcomponents (SessionTitle, SessionHeaderRight, EmptyQueueState), add Add-to-Testset modal wiring, selection, and success navigation.
Session assets/types/utils
.../assets/constants.ts, type.ts, utils.ts
Add session tabs, add-to-testset commit modes, entity adapter, prop types, and getAddToTestsetDisabledReason.
ScenarioListView & exports
ScenarioListView.tsx
Use trace input helpers, group annotation outputs under outputColumns, add rowSelection and Add-to-Testset primary action, and update export mappings.
Cell renderers & utils + tests
web/packages/agenta-ui/src/CellRenderers/*, web/oss/tests/manual/*
Add getBeautifiedJsonEntries, ChatPreviewStrategy, selectPreviewChatMessages; wire into Json/Chat/Smart cell renderers and add tests.
App-create flows & ephemeral templates
web/oss/src/components/pages/app-management/*, web/packages/agenta-entities/src/workflow/state/appUtils.ts, CreateAppDropdown, CreateAppTypeModal
Add ephemeral app creation from templates, CreateAppDropdown/CreateAppTypeModal, prefetch templates, and open workflow revision drawer with app-create context.
Workflow revision drawer
web/packages/agenta-playground-ui/src/components/WorkflowRevisionDrawer/*
Add app-create context, isCreateContext, unified onWorkflowCreated callback shape, blurred mask for create contexts, and AppCreate name input in header.
Workflow local drafts cleanup
web/packages/agenta-entities/src/workflow/state/store.ts
Add discardLocalServerDataAtom to remove local-* ephemeral server data and drafts on drawer close.
Workflow wrapper & UX safety
web/oss/src/components/WorkflowRevisionDrawerWrapper/index.tsx
Use unified commit callback, discard local server data on close, and add beforeunload unsaved-warning for create flows.
App-management / prompts refactor
web/oss/src/components/pages/app-management/*, PromptsPage
Replace templated modal flows with drawer-based ephemeral flow, add CreateAppDropdown, CreateAppTypeModal, and onboarding-driven UI.
Message/toast navigation wrapper
web/packages/agenta-ui/src/utils/appMessageContext.tsx
Wrap Ant message to accept onNavigate/url options and render actionable links in toasts.
Entity picker deselect & hooks
useCascadingMode.ts, CascadingVariant.tsx
Add onDeselect callback support and call it when selection is cleared.
Shared hooks & keyboard hints
web/packages/agenta-shared/src/hooks/useModifierKey.ts
Add useModifierKey hook and re-export it for keyboard hint UIs.
Navigation safety & success toasts
AnnotationUIContext.tsx, CreateQueueDrawer, AddToQueuePopover
Add useAnnotationNavigationSafe, make some navigation callbacks optional, and use safe navigation with richer message.success payloads.
Observability columns
web/oss/src/components/pages/observability/assets/getObservabilityColumns.tsx
Inputs/Outputs columns now use maxWidth: 400 instead of Tailwind class-based truncation.
Version manifest updates
api/pyproject.toml, clients/python/pyproject.toml, sdks/python/pyproject.toml, services/pyproject.toml, web/*.package.json
Bump package versions from 0.99.50.99.6 across multiple packages.

Sequence Diagram(s)

sequenceDiagram
  participant UI as AnnotationSession UI
  participant Controller as annotationSessionController
  participant Store as Jotai atoms / cache
  participant API as Testset API

  UI->>Controller: openAddToTestsetModal(scope)
  UI->>Controller: addScenariosToTestset(params)
  Controller->>Store: prepare rows (buildTraceTestsetRows / buildTestcaseExportRows)
  Controller->>API: commitRevision (create/patch testset)
  API-->>Controller: revision id / job status
  Controller->>Store: set addToTestsetExportJob(status)
  Store-->>UI: export job updated (success)
  UI->>UI: show success message with navigation link (message.success with onNavigate/url)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • Agenta-AI/agenta#4261: Directly related — overlapping Add-to-Testset / annotation session controller and UI changes.
  • Agenta-AI/agenta#4274: Related — similar app-create drawer, ephemeral template, and workflow revision drawer changes.
  • Agenta-AI/agenta#4301: Related — coordinated repository version bumps across manifests.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/v0.99.6

ashrafchowdury and others added 4 commits May 11, 2026 13:56
@dosubot dosubot Bot added size:S This PR changes 10-29 lines, ignoring generated files. and removed size:XS This PR changes 0-9 lines, ignoring generated files. labels May 11, 2026
@dosubot dosubot Bot added size:XXL This PR changes 1000+ lines, ignoring generated files. and removed size:S This PR changes 10-29 lines, ignoring generated files. labels May 11, 2026
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 8

Caution

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

⚠️ Outside diff range comments (1)
web/packages/agenta-annotation-ui/src/components/AnnotationSession/ScenarioListView.tsx (1)

1311-1326: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Use outputKey for testcase fallback export lookup, not the display title.

annotationOutput.title is a label now. When it differs from the actual metric path, this fallback reads the wrong property and exports empty values for renamed output sub-columns.

Suggested fix
-        return fallbackValue && typeof fallbackValue === "object" && !Array.isArray(fallbackValue)
-            ? ((fallbackValue as Record<string, unknown>)[annotationOutput.title] ?? "")
+        return fallbackValue && typeof fallbackValue === "object" && !Array.isArray(fallbackValue)
+            ? ((fallbackValue as Record<string, unknown>)[annotationOutput.outputKey] ?? "")
             : ""
🧹 Nitpick comments (3)
web/packages/agenta-annotation-ui/src/components/AnnotationSession/assets/utils.ts (1)

1-11: ⚡ Quick win

Extract the parameter object shape into an interface.

The inline type here is a good candidate for a named interface to keep the signature cleaner and reusable.

♻️ Proposed refactor
+interface AddToTestsetDisabledReasonParams {
+    scenarioId: string
+    isCompleted: boolean
+    isSubmitting: boolean
+    hasPendingChanges: boolean
+}
+
 export function getAddToTestsetDisabledReason({
     scenarioId,
     isCompleted,
     isSubmitting,
     hasPendingChanges,
-}: {
-    scenarioId: string
-    isCompleted: boolean
-    isSubmitting: boolean
-    hasPendingChanges: boolean
-}): string | null {
+}: AddToTestsetDisabledReasonParams): string | null {

As per coding guidelines, "Prefer interface for defining object shapes in TypeScript".

web/packages/agenta-ui/src/utils/appMessageContext.tsx (1)

105-119: 💤 Low value

Consider adding keyboard accessibility to the link anchor.

The <a> element with onClick handler (lines 106-114) lacks an href attribute, which may cause accessibility issues. Screen readers and keyboard navigation expect anchors to have valid href values or use role="button".

♻️ Suggested improvement
     const link = onNavigate ? (
         <a
+            href="#"
             onClick={(e) => {
                 e.preventDefault()
                 onNavigate()
             }}
             className="underline underline-offset-2"
         >
             {linkText}
         </a>
     ) : (
web/packages/agenta-annotation/src/state/testsetSync.ts (1)

240-251: 💤 Low value

Potential key collision in expandInputsColumn when inputs object has keys matching other data fields.

When inputs contains keys that also exist in rest, the spread order {...inputs, ...rest} means rest values will overwrite inputs values. If the intent is to preserve original data fields over inputs, this is correct. However, if inputs should take precedence, the order should be reversed.


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 4bc0f541-a06a-46f3-9f67-b5b5f0e93548

📥 Commits

Reviewing files that changed from the base of the PR and between 270092e and f07d793.

📒 Files selected for processing (52)
  • web/oss/src/components/DrillInView/TraceSpanDrillInView.tsx
  • web/oss/src/components/DrillInView/VIEW_MODES.md
  • web/oss/src/components/DrillInView/viewModes.ts
  • web/oss/src/components/SharedDrawers/TraceDrawer/components/AccordionTreePanel.tsx
  • web/oss/src/components/SharedDrawers/TraceDrawer/components/TraceContent/components/OverviewTabItem/index.tsx
  • web/oss/src/components/SharedDrawers/TraceDrawer/components/TraceContent/components/OverviewTabItem/messagePanels.ts
  • web/oss/src/components/pages/observability/assets/getObservabilityColumns.tsx
  • web/oss/src/pages/w/[workspace_id]/p/[project_id]/annotations/[queue_id].tsx
  • web/oss/src/pages/w/[workspace_id]/p/[project_id]/annotations/index.tsx
  • web/oss/tests/manual/cell-renderers/test-extract-chat-messages.ts
  • web/packages/agenta-annotation-ui/src/components/AddToQueuePopover/index.tsx
  • web/packages/agenta-annotation-ui/src/components/AnnotationQueuesView/index.tsx
  • web/packages/agenta-annotation-ui/src/components/AnnotationSession/ConfigurationView.tsx
  • web/packages/agenta-annotation-ui/src/components/AnnotationSession/EmptyQueueState.tsx
  • web/packages/agenta-annotation-ui/src/components/AnnotationSession/FocusView.tsx
  • web/packages/agenta-annotation-ui/src/components/AnnotationSession/ScenarioListView.tsx
  • web/packages/agenta-annotation-ui/src/components/AnnotationSession/SessionHeaderRight.tsx
  • web/packages/agenta-annotation-ui/src/components/AnnotationSession/SessionNavigation.tsx
  • web/packages/agenta-annotation-ui/src/components/AnnotationSession/SessionTitle.tsx
  • web/packages/agenta-annotation-ui/src/components/AnnotationSession/assets/constants.ts
  • web/packages/agenta-annotation-ui/src/components/AnnotationSession/assets/type.ts
  • web/packages/agenta-annotation-ui/src/components/AnnotationSession/assets/utils.ts
  • web/packages/agenta-annotation-ui/src/components/AnnotationSession/index.tsx
  • web/packages/agenta-annotation-ui/src/components/CreateQueueDrawer/index.tsx
  • web/packages/agenta-annotation-ui/src/context/AnnotationUIContext.tsx
  • web/packages/agenta-annotation-ui/src/context/index.ts
  • web/packages/agenta-annotation/src/index.ts
  • web/packages/agenta-annotation/src/state/controllers/annotationFormController.ts
  • web/packages/agenta-annotation/src/state/controllers/annotationSessionController.ts
  • web/packages/agenta-annotation/src/state/controllers/index.ts
  • web/packages/agenta-annotation/src/state/index.ts
  • web/packages/agenta-annotation/src/state/testsetSync.ts
  • web/packages/agenta-annotation/src/state/traceInputDisplay.ts
  • web/packages/agenta-annotation/src/state/types.ts
  • web/packages/agenta-entities/src/testset/api/api.ts
  • web/packages/agenta-entities/src/testset/api/index.ts
  • web/packages/agenta-entities/src/testset/api/mutations.ts
  • web/packages/agenta-entities/src/testset/index.ts
  • web/packages/agenta-entity-ui/src/modals/commit/components/EntityCommitContent.tsx
  • web/packages/agenta-entity-ui/src/modals/commit/components/EntityCommitModal.tsx
  • web/packages/agenta-entity-ui/src/modals/commit/state.ts
  • web/packages/agenta-entity-ui/src/selection/components/UnifiedEntityPicker/types.ts
  • web/packages/agenta-entity-ui/src/selection/components/UnifiedEntityPicker/variants/CascadingVariant.tsx
  • web/packages/agenta-entity-ui/src/selection/hooks/modes/useCascadingMode.ts
  • web/packages/agenta-shared/src/hooks/index.ts
  • web/packages/agenta-shared/src/hooks/useModifierKey.ts
  • web/packages/agenta-shared/src/index.ts
  • web/packages/agenta-ui/src/CellRenderers/ChatMessagesCellContent.tsx
  • web/packages/agenta-ui/src/CellRenderers/JsonCellContent.tsx
  • web/packages/agenta-ui/src/CellRenderers/SmartCellContent.tsx
  • web/packages/agenta-ui/src/CellRenderers/utils.ts
  • web/packages/agenta-ui/src/utils/appMessageContext.tsx
💤 Files with no reviewable changes (2)
  • web/packages/agenta-entity-ui/src/modals/commit/state.ts
  • web/packages/agenta-entity-ui/src/modals/commit/components/EntityCommitModal.tsx
✅ Files skipped from review due to trivial changes (9)
  • web/packages/agenta-annotation/src/state/controllers/index.ts
  • web/packages/agenta-annotation-ui/src/components/AnnotationSession/EmptyQueueState.tsx
  • web/oss/src/pages/w/[workspace_id]/p/[project_id]/annotations/index.tsx
  • web/packages/agenta-shared/src/hooks/index.ts
  • web/packages/agenta-annotation-ui/src/context/index.ts
  • web/packages/agenta-annotation/src/state/index.ts
  • web/oss/src/components/DrillInView/viewModes.ts
  • web/packages/agenta-entities/src/testset/api/index.ts
  • web/packages/agenta-annotation-ui/src/components/AnnotationSession/assets/type.ts

Comment thread web/packages/agenta-entities/src/testset/api/api.ts
Comment thread web/packages/agenta-shared/src/hooks/useModifierKey.ts
@github-actions
Copy link
Copy Markdown
Contributor Author

github-actions Bot commented May 11, 2026

Railway Preview Environment

Status Destroyed (PR closed)

Updated at 2026-05-11T16:14:43.044Z

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

Caution

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

⚠️ Outside diff range comments (1)
web/oss/src/components/pages/prompts/PromptsPage.tsx (1)

410-423: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Don't overwrite timeout/error retries with success.

Line 422 runs after the catch block too, so a timed-out or failed retry is always converted to success. That masks real failures and refetches workflows on an error path.

Proposed fix
     const onTimeoutRetry = useCallback(async () => {
         if (!statusData.appId) return
         setStatusData((prev) => ({...prev, status: "configuring_app", details: undefined}))
         try {
             await waitForAppToStart({appId: statusData.appId, timeout})
+            setStatusData((prev) => ({...prev, status: "success", details: undefined}))
+            refetchWorkflows()
         } catch (error: any) {
             if (error.message === "timeout") {
                 setStatusData((prev) => ({...prev, status: "timeout", details: undefined}))
             } else {
                 setStatusData((prev) => ({...prev, status: "error", details: error}))
             }
+            return
         }
-        setStatusData((prev) => ({...prev, status: "success", details: undefined}))
-        refetchWorkflows()
     }, [refetchWorkflows, setStatusData, statusData.appId])
🧹 Nitpick comments (5)
web/oss/src/state/url/trace.ts (1)

18-25: 💤 Low value

Consider using a Jotai atom for the drawerOpenedViaUrl flag.

Module-level mutable state works here but deviates from the codebase pattern of using Jotai atoms for shared state. An atom would provide better alignment with other state in this module and avoid potential HMR or test-isolation edge cases.

-// Tracks whether the current trace drawer was opened via URL (trace param).
-// Only URL-driven drawers should be closed by URL sync. Drawers opened
-// programmatically (e.g. from execution-result trace buttons inside the
-// WorkflowRevisionDrawer "+ New prompt" flow on /apps) must survive route
-// changes and URL syncs that don't natively support trace context — otherwise
-// `syncTraceStateFromUrl` strips `?span=...` while the drawer's tree-click
-// handler re-adds it, producing a tight URL change loop.
-let drawerOpenedViaUrl = false
+/**
+ * Tracks whether the current trace drawer was opened via URL (trace param).
+ * Only URL-driven drawers should be closed by URL sync. Drawers opened
+ * programmatically must survive route changes.
+ */
+const drawerOpenedViaUrlAtom = atom(false)

Then use store.get(drawerOpenedViaUrlAtom) / store.set(drawerOpenedViaUrlAtom, value) where needed.

As per coding guidelines: "Use Jotai atoms for all kinds of shared state instead of prop drilling."

web/oss/src/components/Playground/Components/Modals/CommitVariantChangesModal/index.tsx (1)

236-240: 💤 Low value

Clarify the fallback behavior for unrecognized ephemeral flows.

The fallback to EVALUATOR_CREATE_FIELDS for entities that are neither evaluator nor application may be surprising. The comment mentions "backward compat," but if a new entity type is added, it would silently show "Evaluator name" as the label.

Consider whether this fallback is intentional or should throw/warn for unrecognized ephemeral types.

web/packages/agenta-entities/src/workflow/index.ts (1)

314-320: 💤 Low value

Consider moving app exports to a dedicated section.

The app template exports are placed under the "EVALUATOR UTILITIES" section header (line 272), which is misleading. While the inline comment on line 314 clarifies their purpose, readers scanning section headers may miss them.

Consider adding a separate "APP UTILITIES" section header for clarity, mirroring the structure in state/index.ts.

web/oss/src/components/pages/app-management/modals/CreateAppTypeModal/index.tsx (1)

78-98: ⚡ Quick win

Consider adding a catch clause for non-abort errors.

If createEphemeralAppFromTemplate throws (e.g., network failure), the error propagates silently — the spinner clears via finally, but the user gets no feedback. Adding a catch would let you surface a user-friendly message.

♻️ Suggested change
             startTransition(async () => {
                 try {
                     const entityId = await createEphemeralAppFromTemplate({
                         type: option.type,
                         signal: controller.signal,
                     })
                     if (controller.signal.aborted) return
                     if (!entityId) {
                         message.error("Couldn't start app creation — please retry")
                         return
                     }
                     onCancel()
                     setOpenDrawer({
                         entityId,
                         context: "app-create",
                     })
+                } catch (err) {
+                    if (controller.signal.aborted) return
+                    message.error("Failed to create app — please retry")
                 } finally {
                     if (inflightRef.current === controller) inflightRef.current = null
                     setActiveType(null)
                 }
             })
web/oss/src/components/pages/app-management/components/CreateAppDropdown/index.tsx (1)

85-108: ⚡ Quick win

Consider adding a catch clause for non-abort errors.

Same pattern as CreateAppTypeModal — if createEphemeralAppFromTemplate throws a network or server error, it propagates without user feedback. Adding a catch would improve UX.

♻️ Suggested change
             startTransition(async () => {
                 try {
                     const entityId = await createEphemeralAppFromTemplate({
                         type: appType,
                         signal: controller.signal,
                     })
                     if (controller.signal.aborted) return
                     if (!entityId) {
                         message.error("Couldn't start app creation — please retry")
                         return
                     }
                     setOpenDrawer({
                         entityId,
                         context: "app-create",
                     })
+                } catch (err) {
+                    if (controller.signal.aborted) return
+                    message.error("Failed to create app — please retry")
                 } finally {
                     if (inflightRef.current === controller) inflightRef.current = null
                 }
             })

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a40db819-3434-43ac-9499-a9f9a533ae0b

📥 Commits

Reviewing files that changed from the base of the PR and between f07d793 and ec5ab80.

📒 Files selected for processing (38)
  • services/entrypoints/main.py
  • web/oss/src/components/ModelRegistry/Drawers/ConfigureProviderDrawer/assets/ConfigureProviderDrawerContent.tsx
  • web/oss/src/components/Playground/Components/Modals/CommitVariantChangesModal/index.tsx
  • web/oss/src/components/SharedDrawers/AnnotateDrawer/assets/CreateEvaluator/assets/CreateNewMetric/index.tsx
  • web/oss/src/components/SharedDrawers/AnnotateDrawer/assets/CreateEvaluator/index.tsx
  • web/oss/src/components/WorkflowRevisionDrawerWrapper/index.tsx
  • web/oss/src/components/pages/app-management/components/ApplicationManagementSection.tsx
  • web/oss/src/components/pages/app-management/components/CreateAppDropdown/index.tsx
  • web/oss/src/components/pages/app-management/components/EmptyAppView.tsx
  • web/oss/src/components/pages/app-management/components/appWorkflowColumns.tsx
  • web/oss/src/components/pages/app-management/index.tsx
  • web/oss/src/components/pages/app-management/modals/AddAppFromTemplateModal/assets/styles.ts
  • web/oss/src/components/pages/app-management/modals/AddAppFromTemplateModal/components/AddAppFromTemplateModalContent.tsx
  • web/oss/src/components/pages/app-management/modals/AddAppFromTemplateModal/index.tsx
  • web/oss/src/components/pages/app-management/modals/AddAppFromTemplateModal/types.ts
  • web/oss/src/components/pages/app-management/modals/CreateAppTypeModal/index.tsx
  • web/oss/src/components/pages/app-management/modals/CustomWorkflowModal/components/CustomWorkflowModalContent.tsx
  • web/oss/src/components/pages/app-management/modals/CustomWorkflowModal/components/CustomWorkflowModalFooter.tsx
  • web/oss/src/components/pages/app-management/modals/EditAppModal/index.tsx
  • web/oss/src/components/pages/app-management/store/appWorkflowStore.ts
  • web/oss/src/components/pages/app-management/store/index.ts
  • web/oss/src/components/pages/prompts/PromptsPage.tsx
  • web/oss/src/components/pages/prompts/components/PromptsBreadcrumb.tsx
  • web/oss/src/components/pages/prompts/components/PromptsTableSection.tsx
  • web/oss/src/lib/helpers/utils.ts
  • web/oss/src/state/url/routeMatchers.ts
  • web/oss/src/state/url/trace.ts
  • web/oss/tests/playwright/acceptance/app/index.ts
  • web/oss/tests/playwright/acceptance/app/test.ts
  • web/packages/agenta-entities/src/workflow/index.ts
  • web/packages/agenta-entities/src/workflow/state/appUtils.ts
  • web/packages/agenta-entities/src/workflow/state/index.ts
  • web/packages/agenta-entities/src/workflow/state/store.ts
  • web/packages/agenta-playground-ui/src/components/WorkflowRevisionDrawer/DrawerContent.tsx
  • web/packages/agenta-playground-ui/src/components/WorkflowRevisionDrawer/DrawerHeader.tsx
  • web/packages/agenta-playground-ui/src/components/WorkflowRevisionDrawer/WorkflowRevisionDrawer.tsx
  • web/packages/agenta-playground-ui/src/components/WorkflowRevisionDrawer/index.ts
  • web/packages/agenta-playground-ui/src/components/WorkflowRevisionDrawer/store.ts
💤 Files with no reviewable changes (6)
  • web/oss/src/components/pages/app-management/modals/AddAppFromTemplateModal/components/AddAppFromTemplateModalContent.tsx
  • web/oss/src/components/pages/app-management/modals/EditAppModal/index.tsx
  • web/oss/src/components/pages/app-management/modals/AddAppFromTemplateModal/types.ts
  • web/oss/src/components/pages/app-management/modals/AddAppFromTemplateModal/assets/styles.ts
  • web/oss/src/components/pages/app-management/modals/AddAppFromTemplateModal/index.tsx
  • web/oss/src/components/pages/app-management/modals/CustomWorkflowModal/components/CustomWorkflowModalFooter.tsx
✅ Files skipped from review due to trivial changes (2)
  • web/oss/src/state/url/routeMatchers.ts
  • web/oss/src/components/pages/app-management/store/index.ts

Comment thread services/entrypoints/main.py
Comment thread web/oss/src/components/pages/prompts/PromptsPage.tsx
Comment thread web/oss/tests/playwright/acceptance/app/test.ts
@dosubot dosubot Bot added the lgtm This PR has been approved by a maintainer label May 11, 2026
@bekossy bekossy merged commit be58e76 into main May 11, 2026
36 of 40 checks passed
@coderabbitai coderabbitai Bot mentioned this pull request May 13, 2026
4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lgtm This PR has been approved by a maintainer size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants