From be9549c26619c1d92f089d5e61b532114e006810 Mon Sep 17 00:00:00 2001 From: minasarustamyan <156230623+minasarustamyan@users.noreply.github.com> Date: Thu, 21 May 2026 11:02:29 +0200 Subject: [PATCH 1/2] Marketplace: configurable 'See all curators' URL + flea-inner hero name fix (#370) * fix(web): flea-inner skill/agent hero shows skill name, not parent plugin name * feat(marketplace): admin-configurable 'See all curators' link URL --------- Co-authored-by: Minas Arustamyan --- CHANGELOG.md | 15 +++++++++++++++ app/api/admin.py | 13 +++++++++++++ app/web/router.py | 3 +++ app/web/templates/marketplace.html | 4 +++- app/web/templates/marketplace_item_detail.html | 14 +++++++++----- 5 files changed, 43 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03fba05..2883b19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,12 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C ## [Unreleased] ### 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 · @@ -65,6 +71,15 @@ 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 +- 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 diff --git a/app/api/admin.py b/app/api/admin.py index 937a00e..ca0b290 100644 --- a/app/api/admin.py +++ b/app/api/admin.py @@ -167,6 +167,7 @@ def _normalize_primary_key(v): # Devin ANALYSIS_0001 on PR #141 5f649a4 review. _URL_BEARING_FIELDS: tuple[tuple[str, ...], ...] = ( ("data_source", "keboola", "stack_url"), + ("marketplace", "curators_url"), ) @@ -257,6 +258,7 @@ _EDITABLE_SECTIONS: tuple[str, ...] = ( "corporate_memory", "materialize", "guardrails", + "marketplace", ) # "Danger-zone" sections — flipping these can lock operators out (auth.*) or @@ -811,6 +813,17 @@ _KNOWN_FIELDS: dict[str, dict[str, dict]] = { ), }, }, + "marketplace": { + "curators_url": { + "kind": "string", + "hint": ( + "URL the 'See all curators →' link on /marketplace points to " + "(e.g. an internal wiki page listing curators accountable for " + "the curated marketplace). Empty → the link is hidden. " + "Validated against private-IP allowlist on save (SSRF guard)." + ), + }, + }, } # Keys whose values must be redacted from the audit diff. We match diff --git a/app/web/router.py b/app/web/router.py index ca8c18e..15b813d 100644 --- a/app/web/router.py +++ b/app/web/router.py @@ -1921,9 +1921,12 @@ async def marketplace_listing( ): import json as _json from src.category_icons import all_paths + from app.instance_config import get_value + curators_url = (get_value("marketplace", "curators_url") or "").strip() ctx = _build_context( request, user=user, category_icons_json=_json.dumps(all_paths()), + curators_url=curators_url, ) return templates.TemplateResponse(request, "marketplace.html", ctx) diff --git a/app/web/templates/marketplace.html b/app/web/templates/marketplace.html index d18eba3..59ad880 100644 --- a/app/web/templates/marketplace.html +++ b/app/web/templates/marketplace.html @@ -518,7 +518,9 @@
Each plugin here has a named curator accountable for it.
Each plugin in this marketplace has a named curator and meets a baseline review bar (security, telemetry hygiene, documentation).
- See all curators → + {% if curators_url %} + See all curators → + {% endif %}