diff --git a/src/ui/src/builder/BuilderApp.vue b/src/ui/src/builder/BuilderApp.vue
index 3da4b1fbb..006b2f3a6 100644
--- a/src/ui/src/builder/BuilderApp.vue
+++ b/src/ui/src/builder/BuilderApp.vue
@@ -84,16 +84,6 @@
-
-
@@ -603,27 +593,6 @@ onUnmounted(() => {
display: grid;
}
-.deprecationDimmer {
- pointer-events: none;
- position: absolute;
- inset: 0;
- z-index: 6;
- background-color: #e4e7ed;
- opacity: 0.65;
-}
-
-.deprecationBlocker {
- pointer-events: all;
- cursor: not-allowed;
- position: absolute;
- top: var(--builderTopBarHeight);
- left: 0;
- right: 0;
- bottom: 0;
- z-index: 6;
- background: transparent;
-}
-
.builderHeader {
grid-column: 1 / 3;
grid-row: 1;
diff --git a/src/ui/src/builder/BuilderDeprecationBanner.vue b/src/ui/src/builder/BuilderDeprecationBanner.vue
index 9e08982de..f2133f9aa 100644
--- a/src/ui/src/builder/BuilderDeprecationBanner.vue
+++ b/src/ui/src/builder/BuilderDeprecationBanner.vue
@@ -165,7 +165,7 @@ const body = computed(() => {
}
return props.isOrganizationAdmin
? "This legacy agent editor will no longer be available - migrate your agent to the new Agent Builder now."
- : "This legacy agent editor will no longer be available - create a Playbook instead.";
+ : "This legacy agent editor will no longer be available - work with your Admin to migrate your agent to the new Agent Builder now.";
});
const migrateLabel = computed(() =>
@@ -237,7 +237,7 @@ function onPlaybookClick() {
.BuilderDeprecationBanner__copy {
min-width: 0;
- max-width: 720px;
+ max-width: calc(100% - 200px);
color: white;
}
diff --git a/src/writer/serve.py b/src/writer/serve.py
index bd0ed7a65..e0c5fb1d9 100644
--- a/src/writer/serve.py
+++ b/src/writer/serve.py
@@ -41,6 +41,7 @@
from pydantic import ValidationError
from starlette.websockets import WebSocket, WebSocketDisconnect, WebSocketState
+import writer
from writer import VERSION, abstract
from writer.ai import Graph
from writer.app_runner import AppRunner
@@ -136,6 +137,12 @@ async def lifespan(asgi_app: FastAPI):
app_runner.hook_to_running_event_loop()
app_runner.load()
+ # Register platform-level deprecation flags so the LaunchDarkly client
+ # evaluates them for every agent builder session. These are merged with
+ # any flags already set by the user application's main.py.
+ _PLATFORM_FLAGS = {"beforeDeprecationCutoffAbv2", "afterDeprecationCutoffAbv2"}
+ writer.Config.feature_flags = list(set(writer.Config.feature_flags) | _PLATFORM_FLAGS)
+
if (
on_load is not None
and hasattr(asgi_app.state, "is_server_static_mounted")
diff --git a/tests/backend/test_serve.py b/tests/backend/test_serve.py
index 244681269..7a0b1b26e 100644
--- a/tests/backend/test_serve.py
+++ b/tests/backend/test_serve.py
@@ -236,7 +236,16 @@ def test_feature_flags(self):
"Content-Type": "application/json"
})
feature_flags = res.json().get("featureFlags")
- assert feature_flags == ["blueprints", "flag_one", "flag_two", "api_trigger", 'cron_trigger', 'journal']
+ assert set(feature_flags) == {
+ "blueprints",
+ "flag_one",
+ "flag_two",
+ "api_trigger",
+ "cron_trigger",
+ "journal",
+ "beforeDeprecationCutoffAbv2",
+ "afterDeprecationCutoffAbv2",
+ }
def test_get_cron_triggers_api(self):
"""