From 5e933536f6ef29f2cafcb152e3cdc53fe5dcbd08 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sun, 1 Feb 2026 12:03:55 +0000 Subject: [PATCH 001/302] fix: move skills endpoints to server/routes (#634) --- nuxt.config.ts | 2 ++ .../[pkg]/.well-known-skills.ts} | 11 +---------- server/routes/[pkg]/[scope]/well-known-skills.ts | 1 + 3 files changed, 4 insertions(+), 10 deletions(-) rename server/{middleware/well-known-skills.ts => routes/[pkg]/.well-known-skills.ts} (86%) create mode 100644 server/routes/[pkg]/[scope]/well-known-skills.ts diff --git a/nuxt.config.ts b/nuxt.config.ts index d54dbd52e..d9f3078b0 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -93,6 +93,8 @@ export default defineNuxtConfig({ '/opensearch.xml': { isr: true }, '/**': { isr: 60 }, '/package/**': { isr: 60 }, + '/:pkg/.well-known/skills/**': { isr: 3600 }, + '/:scope/:pkg/.well-known/skills/**': { isr: 3600 }, // never cache '/search': { isr: false, cache: false }, '/api/auth/**': { isr: false, cache: false }, diff --git a/server/middleware/well-known-skills.ts b/server/routes/[pkg]/.well-known-skills.ts similarity index 86% rename from server/middleware/well-known-skills.ts rename to server/routes/[pkg]/.well-known-skills.ts index 72f21b269..93bed3e10 100644 --- a/server/middleware/well-known-skills.ts +++ b/server/routes/[pkg]/.well-known-skills.ts @@ -6,17 +6,8 @@ import { CACHE_MAX_AGE_ONE_HOUR, CACHE_MAX_AGE_ONE_YEAR } from '#shared/utils/co /** * Serves /.well-known/skills endpoints for `npx skills add` CLI. - * Middleware pattern allows non-matching paths to pass through to Nuxt. */ -export default defineEventHandler(event => { - const url = getRequestURL(event) - const match = url.pathname.match(/^\/(.+?)\/\.well-known\/skills\/(.*)$/) - if (!match) return - - return cachedHandler(event) -}) - -const cachedHandler = defineCachedEventHandler( +export default defineCachedEventHandler( async (event: H3Event) => { const url = getRequestURL(event) const match = url.pathname.match(/^\/(.+?)\/\.well-known\/skills\/(.*)$/)! diff --git a/server/routes/[pkg]/[scope]/well-known-skills.ts b/server/routes/[pkg]/[scope]/well-known-skills.ts new file mode 100644 index 000000000..81083e935 --- /dev/null +++ b/server/routes/[pkg]/[scope]/well-known-skills.ts @@ -0,0 +1 @@ +export { default } from '../.well-known-skills' From 3ae8375202c32fbe2841893ada6cb49bd17b6c5d Mon Sep 17 00:00:00 2001 From: Thomas Deinhamer <184284+thasmo@users.noreply.github.com> Date: Sun, 1 Feb 2026 13:41:45 +0100 Subject: [PATCH 002/302] =?UTF-8?q?feat:=20pin=20package=20header=20?= =?UTF-8?q?=F0=9F=93=8C=20(#566)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/pages/[...package].vue | 303 ++++++++++++++++++++----------------- 1 file changed, 167 insertions(+), 136 deletions(-) diff --git a/app/pages/[...package].vue b/app/pages/[...package].vue index 81b53d60f..44dee1f1e 100644 --- a/app/pages/[...package].vue +++ b/app/pages/[...package].vue @@ -19,6 +19,27 @@ definePageMeta({ const router = useRouter() +const header = useTemplateRef('header') +const isHeaderPinned = shallowRef(false) + +function checkHeaderPosition() { + const el = header.value + if (!el) return + + const style = getComputedStyle(el) + const top = parseFloat(style.top) || 0 + const rect = el.getBoundingClientRect() + + isHeaderPinned.value = Math.abs(rect.top - top) < 1 +} + +useEventListener('scroll', checkHeaderPosition, { passive: true }) +useEventListener('resize', checkHeaderPosition) + +onMounted(() => { + checkHeaderPosition() +}) + const { packageName, requestedVersion, orgName } = usePackageRoute() const selectedPM = useSelectedPackageManager() const activePmId = computed(() => selectedPM.value ?? 'npm') @@ -389,153 +410,157 @@ function handleClick(event: MouseEvent) {