From a2a7b845e67c6af317927da52d3bb726709f2687 Mon Sep 17 00:00:00 2001 From: David Rybar Date: Thu, 21 May 2026 11:20:23 +0200 Subject: [PATCH 1/4] feat(theme): switch default instance theme from navy to blue and enhance theme handling - Updated the default `instance.theme` to `blue`, making it the new out-of-the-box look. The previous default `navy` can still be used by explicitly setting `AGNES_INSTANCE_THEME`. - Pre-login pages now respect the configured `instance.theme`, eliminating the abrupt color change after sign-in for navy-configured instances. - Adjusted documentation and code comments to reflect the new theme settings and their implications for existing instances. - Version bump to 0.55.6 to reflect these changes. --- CHANGELOG.md | 15 +++++++++++++++ app/api/admin.py | 12 ++++++------ app/instance_config.py | 15 ++++++++------- app/web/router.py | 4 ++-- app/web/templates/base.html | 2 +- app/web/templates/base_login.html | 2 +- uv.lock | 2 +- 7 files changed, 34 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03fba05..f7f94f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,21 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C ## [Unreleased] +### Changed +- Default `instance.theme` flipped from `navy` to `blue`. The brand-blue + palette is now the out-of-the-box look; `navy` (dark hero + mint-green + CTAs) is the opt-in via `AGNES_INSTANCE_THEME` / `instance.theme` + / admin server-config. Existing instances that explicitly set `navy` + are unaffected; instances relying on the implicit default will switch + to blue. + +### Fixed +- Pre-login pages (`/login`, magic-link screens, first-time `/setup`) + now honour the configured `instance.theme` instead of always + rendering with the default `:root` palette. Eliminates the + jarring blue → navy flip after sign-in on navy-configured + instances. + ### Added - `/home` now opens with a value-first intro hero — eyebrow greeting, one-line product framing, **Set up in ~15 min** / **Just browse** diff --git a/app/api/admin.py b/app/api/admin.py index 937a00e..6521eed 100644 --- a/app/api/admin.py +++ b/app/api/admin.py @@ -296,13 +296,13 @@ _KNOWN_FIELDS: dict[str, dict[str, dict]] = { # `app/instance_config.py::get_instance_theme()`. "theme": { "kind": "select", - "options": ["navy", "blue"], - "default": "navy", + "options": ["blue", "navy"], + "default": "blue", "hint": ( - "Page-hero colour scheme. `navy` (default) uses the " - "dark navy hero gradient + mint-green CTAs and " - "eyebrow accents. `blue` reverts to the pre-redesign " - "brand-blue hero + blue CTAs." + "Page-hero colour scheme. `blue` (default) uses the " + "brand-blue hero + blue CTAs. `navy` opts into the " + "darker palette with the dark navy hero gradient + " + "mint-green CTAs and eyebrow accents." ), }, }, diff --git a/app/instance_config.py b/app/instance_config.py index d6c6ff3..44de732 100644 --- a/app/instance_config.py +++ b/app/instance_config.py @@ -234,24 +234,25 @@ def get_instance_theme() -> str: (`--ds-*`) flips between palettes without touching markup. Values: - - ``navy`` — current default. Dark navy hero gradient, - mint-green CTAs + eyebrow accents. - - ``blue`` — pre-redesign palette. Brand-blue hero gradient, + - ``blue`` — current default. Brand-blue hero gradient, blue CTAs, translucent-white eyebrow. + - ``navy`` — darker palette opted into via server config. + Dark navy hero gradient, mint-green CTAs + + eyebrow accents. Resolution: ``AGNES_INSTANCE_THEME`` env var (Terraform-friendly) > ``instance.theme`` in instance.yaml > - default ``"navy"``. Unrecognised values fall back to ``"navy"`` + default ``"blue"``. Unrecognised values fall back to ``"blue"`` so a typo doesn't silently break every page. """ raw = os.environ.get("AGNES_INSTANCE_THEME") if raw is None: - raw = get_value("instance", "theme", default="navy") + raw = get_value("instance", "theme", default="blue") if not isinstance(raw, str): - return "navy" + return "blue" value = raw.strip().lower() if value not in ("navy", "blue"): - return "navy" + return "blue" return value diff --git a/app/web/router.py b/app/web/router.py index ca8c18e..b791c8f 100644 --- a/app/web/router.py +++ b/app/web/router.py @@ -491,8 +491,8 @@ def _build_context( "workspace_dir": get_workspace_dir_name(), # Active palette — drives `` in # base.html so `--ds-*` tokens flip via CSS without - # touching markup. "navy" (default) = current design; - # "blue" = pre-redesign brand. Admin toggles via + # touching markup. "blue" (default) = brand-blue palette; + # "navy" = darker opt-in palette. Admin toggles via # /admin/server-config. "instance_theme": get_instance_theme(), # Whether /home renders the "Step 3 — turn on auto-accept mode" diff --git a/app/web/templates/base.html b/app/web/templates/base.html index 7c9d2f4..f86bedf 100644 --- a/app/web/templates/base.html +++ b/app/web/templates/base.html @@ -1,5 +1,5 @@ - + diff --git a/app/web/templates/base_login.html b/app/web/templates/base_login.html index 366d6de..d8b6fe0 100644 --- a/app/web/templates/base_login.html +++ b/app/web/templates/base_login.html @@ -1,5 +1,5 @@ - + diff --git a/uv.lock b/uv.lock index 72a09cf..a3fbe66 100644 --- a/uv.lock +++ b/uv.lock @@ -24,7 +24,7 @@ wheels = [ [[package]] name = "agnes-the-ai-analyst" -version = "0.55.5" +version = "0.55.6" source = { editable = "." } dependencies = [ { name = "a2wsgi" }, From 94af2581f64700746166ea198859ca7843524282 Mon Sep 17 00:00:00 2001 From: David Rybar Date: Thu, 21 May 2026 11:20:23 +0200 Subject: [PATCH 2/4] feat(theme): switch default instance theme from navy to blue and enhance theme handling - Updated the default `instance.theme` to `blue`, making it the new out-of-the-box look. The previous default `navy` can still be used by explicitly setting `AGNES_INSTANCE_THEME`. - Pre-login pages now respect the configured `instance.theme`, eliminating the abrupt color change after sign-in for navy-configured instances. - Adjusted documentation and code comments to reflect the new theme settings and their implications for existing instances. - Version bump to 0.55.6 to reflect these changes. --- CHANGELOG.md | 15 +++++++++++++++ app/api/admin.py | 12 ++++++------ app/instance_config.py | 15 ++++++++------- app/web/router.py | 4 ++-- app/web/templates/base.html | 2 +- app/web/templates/base_login.html | 2 +- uv.lock | 2 +- 7 files changed, 34 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2883b19..1a61132 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,21 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C ## [Unreleased] +### Changed +- Default `instance.theme` flipped from `navy` to `blue`. The brand-blue + palette is now the out-of-the-box look; `navy` (dark hero + mint-green + CTAs) is the opt-in via `AGNES_INSTANCE_THEME` / `instance.theme` + / admin server-config. Existing instances that explicitly set `navy` + are unaffected; instances relying on the implicit default will switch + to blue. + +### Fixed +- Pre-login pages (`/login`, magic-link screens, first-time `/setup`) + now honour the configured `instance.theme` instead of always + rendering with the default `:root` palette. Eliminates the + jarring blue → navy flip after sign-in on navy-configured + instances. + ### Added - New `marketplace.curators_url` config item (editable via `/admin/server-config` → **Marketplace** section). Drives the diff --git a/app/api/admin.py b/app/api/admin.py index ca0b290..d767d72 100644 --- a/app/api/admin.py +++ b/app/api/admin.py @@ -298,13 +298,13 @@ _KNOWN_FIELDS: dict[str, dict[str, dict]] = { # `app/instance_config.py::get_instance_theme()`. "theme": { "kind": "select", - "options": ["navy", "blue"], - "default": "navy", + "options": ["blue", "navy"], + "default": "blue", "hint": ( - "Page-hero colour scheme. `navy` (default) uses the " - "dark navy hero gradient + mint-green CTAs and " - "eyebrow accents. `blue` reverts to the pre-redesign " - "brand-blue hero + blue CTAs." + "Page-hero colour scheme. `blue` (default) uses the " + "brand-blue hero + blue CTAs. `navy` opts into the " + "darker palette with the dark navy hero gradient + " + "mint-green CTAs and eyebrow accents." ), }, }, diff --git a/app/instance_config.py b/app/instance_config.py index d6c6ff3..44de732 100644 --- a/app/instance_config.py +++ b/app/instance_config.py @@ -234,24 +234,25 @@ def get_instance_theme() -> str: (`--ds-*`) flips between palettes without touching markup. Values: - - ``navy`` — current default. Dark navy hero gradient, - mint-green CTAs + eyebrow accents. - - ``blue`` — pre-redesign palette. Brand-blue hero gradient, + - ``blue`` — current default. Brand-blue hero gradient, blue CTAs, translucent-white eyebrow. + - ``navy`` — darker palette opted into via server config. + Dark navy hero gradient, mint-green CTAs + + eyebrow accents. Resolution: ``AGNES_INSTANCE_THEME`` env var (Terraform-friendly) > ``instance.theme`` in instance.yaml > - default ``"navy"``. Unrecognised values fall back to ``"navy"`` + default ``"blue"``. Unrecognised values fall back to ``"blue"`` so a typo doesn't silently break every page. """ raw = os.environ.get("AGNES_INSTANCE_THEME") if raw is None: - raw = get_value("instance", "theme", default="navy") + raw = get_value("instance", "theme", default="blue") if not isinstance(raw, str): - return "navy" + return "blue" value = raw.strip().lower() if value not in ("navy", "blue"): - return "navy" + return "blue" return value diff --git a/app/web/router.py b/app/web/router.py index 15b813d..38a8b39 100644 --- a/app/web/router.py +++ b/app/web/router.py @@ -491,8 +491,8 @@ def _build_context( "workspace_dir": get_workspace_dir_name(), # Active palette — drives `` in # base.html so `--ds-*` tokens flip via CSS without - # touching markup. "navy" (default) = current design; - # "blue" = pre-redesign brand. Admin toggles via + # touching markup. "blue" (default) = brand-blue palette; + # "navy" = darker opt-in palette. Admin toggles via # /admin/server-config. "instance_theme": get_instance_theme(), # Whether /home renders the "Step 3 — turn on auto-accept mode" diff --git a/app/web/templates/base.html b/app/web/templates/base.html index 7c9d2f4..f86bedf 100644 --- a/app/web/templates/base.html +++ b/app/web/templates/base.html @@ -1,5 +1,5 @@ - + diff --git a/app/web/templates/base_login.html b/app/web/templates/base_login.html index 366d6de..d8b6fe0 100644 --- a/app/web/templates/base_login.html +++ b/app/web/templates/base_login.html @@ -1,5 +1,5 @@ - + diff --git a/uv.lock b/uv.lock index 72a09cf..a3fbe66 100644 --- a/uv.lock +++ b/uv.lock @@ -24,7 +24,7 @@ wheels = [ [[package]] name = "agnes-the-ai-analyst" -version = "0.55.5" +version = "0.55.6" source = { editable = "." } dependencies = [ { name = "a2wsgi" }, From 391cacdee6d8e265890d0e99af232311809d45b5 Mon Sep 17 00:00:00 2001 From: David Rybar Date: Thu, 21 May 2026 11:34:31 +0200 Subject: [PATCH 3/4] fix(theme): apply navy palette to login hero panel under navy theme The data-theme attribute on base_login.html was previously a no-op because the login page CSS only references the legacy --primary family, not the --ds-* tokens that the theme blocks override. Add a single :root[data-theme=navy] .login-features rule so the left hero panel flips from brand-blue to the deep-navy gradient on navy-configured instances. Default (blue) instances are unchanged. --- CHANGELOG.md | 9 +++++---- app/web/static/style-custom.css | 12 ++++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7f94f6..c65e779 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,10 +20,11 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C ### Fixed - Pre-login pages (`/login`, magic-link screens, first-time `/setup`) - now honour the configured `instance.theme` instead of always - rendering with the default `:root` palette. Eliminates the - jarring blue → navy flip after sign-in on navy-configured - instances. + now honour the configured `instance.theme`. `base_login.html` sets + `` from `instance_theme`, and the navy + variant flips the `.login-features` hero panel from brand-blue + `--primary` to the deep-navy gradient — eliminating the jarring + blue → navy flip after sign-in on navy-configured instances. ### Added - `/home` now opens with a value-first intro hero — eyebrow greeting, diff --git a/app/web/static/style-custom.css b/app/web/static/style-custom.css index 98a4347..33bbae0 100644 --- a/app/web/static/style-custom.css +++ b/app/web/static/style-custom.css @@ -2788,6 +2788,18 @@ a.slack-badge:hover { justify-content: center; } +/* Navy theme — when the instance opts in via + `AGNES_INSTANCE_THEME=navy` / `instance.theme=navy`, the + `` attribute is set by base_login.html and + we flip the login-page hero panel from the legacy brand-blue + `--primary` to the deep-navy gradient used by the design-system + hero so /login matches the rest of the navy-themed app. Only + `.login-features` carries a brand colour on the pre-login screens; + the rest of the login chrome is theme-neutral. */ +:root[data-theme="navy"] .login-features { + background: linear-gradient(135deg, #0f1b3a 0%, #0a1430 100%); +} + .features-content { max-width: 480px; } From 7ec87ba3108037df078edba96ec17ac195008eb4 Mon Sep 17 00:00:00 2001 From: David Rybar Date: Thu, 21 May 2026 11:49:22 +0200 Subject: [PATCH 4/4] Update CHANGELOG.md to reflect theme changes and fixes - Default `instance.theme` changed from `navy` to `blue`, making blue the new out-of-the-box look. - Pre-login pages now respect the configured `instance.theme`, addressing the abrupt color change after sign-in for navy-configured instances. - Added `marketplace.curators_url` config item for admin configuration, affecting the `/marketplace` curated-tab link. - Fixed rendering issues on skill/agent detail pages within Flea Market plugins to display the correct titles. --- CHANGELOG.md | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c65e779..d625007 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,23 +10,13 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C ## [Unreleased] -### Changed -- Default `instance.theme` flipped from `navy` to `blue`. The brand-blue - palette is now the out-of-the-box look; `navy` (dark hero + mint-green - CTAs) is the opt-in via `AGNES_INSTANCE_THEME` / `instance.theme` - / admin server-config. Existing instances that explicitly set `navy` - are unaffected; instances relying on the implicit default will switch - to blue. - -### Fixed -- Pre-login pages (`/login`, magic-link screens, first-time `/setup`) - now honour the configured `instance.theme`. `base_login.html` sets - `` from `instance_theme`, and the navy - variant flips the `.login-features` hero panel from brand-blue - `--primary` to the deep-navy gradient — eliminating the jarring - blue → navy flip after sign-in on navy-configured instances. - ### Added +- New `marketplace.curators_url` config item (editable via + `/admin/server-config` → **Marketplace** section). Drives the + "See all curators →" link on the `/marketplace` curated-tab info + block; when empty the link is hidden (matches today's behaviour). + SSRF-guarded on save (private-IP allowlist, same posture as + `data_source.keboola.stack_url`). - `/home` now opens with a value-first intro hero — eyebrow greeting, one-line product framing, **Set up in ~15 min** / **Just browse** CTAs, and a four-pillar row (Data packages · Plugins · Skills · @@ -41,6 +31,12 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C bar, and per-step number badges next to each install block. ### Changed +- Default `instance.theme` flipped from `navy` to `blue`. The brand-blue + palette is now the out-of-the-box look; `navy` (dark hero + mint-green + CTAs) is the opt-in via `AGNES_INSTANCE_THEME` / `instance.theme` + / admin server-config. Existing instances that explicitly set `navy` + are unaffected; instances relying on the implicit default will switch + to blue. - `/home` palette shifted from blue to green/navy: brand accent is now `#2ea877` (mint green) on light surfaces, hero card is navy `#0f1b3a`, code panels are near-black `#0c1224` with warm-yellow @@ -81,6 +77,21 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C standard step-lede size instead of the previous 13px chip. ### Fixed +- Pre-login pages (`/login`, magic-link screens, first-time `/setup`) + now honour the configured `instance.theme`. `base_login.html` sets + `` from `instance_theme`, and the navy + variant flips the `.login-features` hero panel from brand-blue + `--primary` to the deep-navy gradient — eliminating the jarring + blue → navy flip after sign-in on navy-configured instances. +- Skill / agent detail pages nested inside a Flea Market plugin + rendered the parent plugin's title on the hero instead of the + skill/agent name. The frontend fallback chain branched on + `source === 'curated'` and so flea-inner items fell through to + `d.plugin_name`, which the inner-detail API populates with the + parent entity name. Branch now keys on the presence of an inner + segment in the URL so inner items use `d.name || innerName` + (the actual skill/agent name) and standalone flea plugins keep + their `d.plugin_name`. - `/activity-center` audit-log hero rendered as half-width because `_page_hero.html` was nested inside `
`, a flex row that pinned the time-range + auto-refresh controls