feat: custom agent deprecation banner for agent builder [ACTION-5011]#1288
Conversation
- Banner shows before/after deprecation cutoff (Sept 10 2026) with admin vs non-admin copy and CTAs (Migrate agent / Create a playbook) - Post-cutoff banner is non-dismissable and blocks all canvas interaction - Reads beforeDeprecationCutoffAbv2 / afterDeprecationCutoffAbv2 feature flags from wf.featureFlags (same flags as fe.web-app and fe.core) - Reads isOrganizationAdmin from new x-is-org-admin header passed by the platform; surfaces it via wf.isOrganizationAdmin computed - Adds isOrganizationAdmin field to WriterApplicationInformation (ss_types.py) and app_runner.py init session handler Co-authored-by: Cursor <cursoragent@cursor.com>
📝 WalkthroughWalkthroughAdds a custom-agent deprecation banner to the Writer Framework builder UI. The backend reads an ChangesCustom Agent Deprecation Banner
Sequence Diagram(s)sequenceDiagram
participant Browser
participant AppProcess
participant WriterApplicationInformation
participant core as generateCore()
participant BuilderApp
participant BuilderDeprecationBanner
Browser->>AppProcess: WebSocket session init (x-is-org-admin: true)
AppProcess->>WriterApplicationInformation: construct(isOrganizationAdmin=true)
WriterApplicationInformation-->>AppProcess: application info payload
AppProcess-->>Browser: session init response with isOrganizationAdmin
Browser->>core: writerApplication.isOrganizationAdmin
core-->>BuilderApp: isOrganizationAdmin computed ref
BuilderApp->>BuilderApp: compute showDeprecationBanner, isPostCutoff
BuilderApp->>BuilderDeprecationBanner: render(:isOrganizationAdmin, :isPostCutoff, :showDismiss)
BuilderDeprecationBanner-->>BuilderApp: emit dismiss
BuilderApp->>BuilderApp: onDismissBanner → localStorage + dismissed ref
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/ui/src/builder/BuilderApp.vue`:
- Around line 88-92: The dimmer visibility at Line 88 uses isDeprecationActive
as its visibility condition, but this does not account for dismissal or
cloud-related checks. This causes the dimmer to remain visible even after users
dismiss the banner. Replace the v-if="isDeprecationActive" condition with the
same condition used to control the banner visibility (which should include
dismissal state checks). Apply the same fix to the other affected location at
Lines 234-242 to ensure dimmer visibility is consistently tied to whether the
banner is actually displayed to the user.
In `@src/ui/src/builder/BuilderDeprecationBanner.vue`:
- Around line 182-183: The condition at line 182 and line 190 is checking for
both orgId and appId, but the navigation URLs being returned only use orgId and
do not reference appId at all. Remove the unnecessary appId check (specifically
the writerAppId validation) from both the condition at line 182 and the
condition at line 190, keeping only the orgId check. This will allow valid
org-scoped users to access the CTA destinations even when appId is not
available.
🪄 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: defaults
Review profile: CHILL
Plan: Pro
Run ID: f10f9b7f-7b2b-4bbe-ad45-e655a17c9a0f
⛔ Files ignored due to path filters (1)
src/ui/src/assets/custom-agent-deprecation-banner-bg.pngis excluded by!**/*.png
📒 Files selected for processing (5)
src/ui/src/builder/BuilderApp.vuesrc/ui/src/builder/BuilderDeprecationBanner.vuesrc/ui/src/core/index.tssrc/writer/app_runner.pysrc/writer/ss_types.py
…ON-5011] - Fix all prettier/eslint formatting errors in BuilderApp.vue and BuilderDeprecationBanner.vue that were failing CI lint.ci check - Tie canvas dimmer to showDeprecationBanner instead of isDeprecationActive so dismissing the pre-cutoff banner also removes the overlay - Remove unnecessary appId guard from CTA navigation — both migrate and playbook URLs are org-scoped only - Remove now-unused isDeprecationActive computed variable
…CTION-5011] - Canvas is now fully blocked (cursor: not-allowed) for both pre- and post-cutoff states, not just post-cutoff - Split the single dimmer into two layers: a full-coverage visual dim with pointer-events:none (so the header/nav remains clickable) and a transparent blocker that starts below the top bar height and absorbs all pointer events on the canvas - Sync v-if to showDeprecationBanner so overlay disappears when the pre-cutoff banner is dismissed Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
agentBuildervariant fromfe.web-appbeforeDeprecationCutoffAbv2andafterDeprecationCutoffAbv2feature flags (same flags as fe.web-app and fe.core)isOrganizationAdminfield passed from the platform viax-is-org-adminheaderBefore cutoff
After cutoff
Changes
Python backend
ss_types.py— addedisOrganizationAdmin: Optional[bool]toWriterApplicationInformationapp_runner.py— readsx-is-org-adminheader and passes it into the init session payloadVue frontend
core/index.ts— addedisOrganizationAdmintowriterApplicationtype and exposedwf.isOrganizationAdmincomputedbuilder/BuilderDeprecationBanner.vue— new component matching the fe.web-app banner designbuilder/BuilderApp.vue— mounts banner above the builder grid; adds a dimmer overlay that is visual-only pre-cutoff and fully blocking post-cutoffassets/custom-agent-deprecation-banner-bg.png— banner background imageTest plan
beforeDeprecationCutoffAbv2flag → pre-cutoff banner appears, is dismissable, canvas remains interactiveafterDeprecationCutoffAbv2flag → post-cutoff banner appears, no dismiss button, canvas is blockedx-is-org-adminheaderMade with Cursor
Summary by CodeRabbit
Release Notes