From 357c35d45008d090766a317cc1e190ea81bf2a8a Mon Sep 17 00:00:00 2001 From: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> Date: Sun, 13 Sep 2026 14:34:10 +0800 Subject: [PATCH 1/3] fix(web): prevent mobile landing overflow Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> --- web/e2e/landing-navigation.spec.ts | 8 ++++++++ web/src/pages/landing.tsx | 16 ++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/web/e2e/landing-navigation.spec.ts b/web/e2e/landing-navigation.spec.ts index 1f96018d..91e7188c 100644 --- a/web/e2e/landing-navigation.spec.ts +++ b/web/e2e/landing-navigation.spec.ts @@ -23,4 +23,12 @@ test.describe('Landing Navigation (Real API)', () => { await page.getByRole('link', { name: 'Publish Skill' }).click() await expect(page).toHaveURL(/\/login\?returnTo=%2Fdashboard%2Fpublish$/) }) + + test('keeps the landing page within a 390px viewport', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }) + await page.goto('/') + + await expect(page.getByRole('heading', { name: 'Turn team expertise into Agent-ready skills' })).toBeVisible() + await expect.poll(() => page.evaluate(() => document.documentElement.scrollWidth <= window.innerWidth)).toBe(true) + }) }) diff --git a/web/src/pages/landing.tsx b/web/src/pages/landing.tsx index ca485cd7..b7141f6b 100644 --- a/web/src/pages/landing.tsx +++ b/web/src/pages/landing.tsx @@ -175,24 +175,24 @@ function EnterpriseSection() { {t('landing.experience.enterprise.deployment.description')}

-
-
+
+
{t('landing.experience.enterprise.clientLayer')}
Agent
CLI
Web
-
- +
+
-
+
{t('landing.experience.enterprise.serviceLayer')}
SkillHub
Registry
-
- +
+
-
+
{t('landing.experience.enterprise.storageLayer')}
PostgreSQL
Redis
From 6d51766bfdf9daab8bc1f92ab950b022d974ae00 Mon Sep 17 00:00:00 2001 From: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> Date: Sun, 13 Sep 2026 14:34:10 +0800 Subject: [PATCH 2/3] chore(deps): patch web security advisories Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> --- web/package.json | 4 +- web/pnpm-lock.yaml | 108 ++++++++++++++++++++++----------------------- 2 files changed, 56 insertions(+), 56 deletions(-) diff --git a/web/package.json b/web/package.json index 993b16bb..9d21f860 100644 --- a/web/package.json +++ b/web/package.json @@ -11,7 +11,7 @@ "overrides": { "vite@<6.4.3": "^6.4.3", "esbuild@<0.28.1": "^0.28.1", - "js-yaml@<4.3.1": "^4.3.1", + "js-yaml@<4.3.2": "^4.3.2", "browserslist@<4.28.7": "^4.28.7", "undici@<7.29.0": "^7.29.0", "@babel/core@<7.29.6": "^7.29.6", @@ -86,6 +86,6 @@ "tailwindcss": "^3.4.0", "typescript": "^5.7.0", "vite": "^6.4.3", - "vitest": "^4.1.0" + "vitest": "^4.1.11" } } diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index c98e49fc..31886ba6 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -7,7 +7,7 @@ settings: overrides: vite@<6.4.3: ^6.4.3 esbuild@<0.28.1: ^0.28.1 - js-yaml@<4.3.1: ^4.3.1 + js-yaml@<4.3.2: ^4.3.2 browserslist@<4.28.7: ^4.28.7 undici@<7.29.0: ^7.29.0 '@babel/core@<7.29.6': ^7.29.6 @@ -159,8 +159,8 @@ importers: specifier: ^6.4.3 version: 6.4.3(jiti@1.21.7) vitest: - specifier: ^4.1.0 - version: 4.1.8(jsdom@29.1.1)(vite@6.4.3(jiti@1.21.7)) + specifier: ^4.1.11 + version: 4.1.11(jsdom@29.1.1)(vite@6.4.3(jiti@1.21.7)) packages: @@ -1433,11 +1433,11 @@ packages: peerDependencies: vite: ^6.4.3 - '@vitest/expect@4.1.8': - resolution: {integrity: sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ==} + '@vitest/expect@4.1.11': + resolution: {integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==} - '@vitest/mocker@4.1.8': - resolution: {integrity: sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==} + '@vitest/mocker@4.1.11': + resolution: {integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==} peerDependencies: msw: ^2.4.9 vite: ^6.4.3 @@ -1447,20 +1447,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.8': - resolution: {integrity: sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==} + '@vitest/pretty-format@4.1.11': + resolution: {integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==} - '@vitest/runner@4.1.8': - resolution: {integrity: sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==} + '@vitest/runner@4.1.11': + resolution: {integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==} - '@vitest/snapshot@4.1.8': - resolution: {integrity: sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==} + '@vitest/snapshot@4.1.11': + resolution: {integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==} - '@vitest/spy@4.1.8': - resolution: {integrity: sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==} + '@vitest/spy@4.1.11': + resolution: {integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==} - '@vitest/utils@4.1.8': - resolution: {integrity: sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==} + '@vitest/utils@4.1.11': + resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -2068,8 +2068,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.3.1: - resolution: {integrity: sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==} + js-yaml@4.3.2: + resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} hasBin: true jsdom@29.1.1: @@ -2970,20 +2970,20 @@ packages: yaml: optional: true - vitest@4.1.8: - resolution: {integrity: sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==} + vitest@4.1.11: + resolution: {integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.8 - '@vitest/browser-preview': 4.1.8 - '@vitest/browser-webdriverio': 4.1.8 - '@vitest/coverage-istanbul': 4.1.8 - '@vitest/coverage-v8': 4.1.8 - '@vitest/ui': 4.1.8 + '@vitest/browser-playwright': 4.1.11 + '@vitest/browser-preview': 4.1.11 + '@vitest/browser-webdriverio': 4.1.11 + '@vitest/coverage-istanbul': 4.1.11 + '@vitest/coverage-v8': 4.1.11 + '@vitest/ui': 4.1.11 happy-dom: '*' jsdom: '*' vite: ^6.4.3 @@ -3481,7 +3481,7 @@ snapshots: globals: 13.24.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.3.1 + js-yaml: 4.3.2 minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -3994,7 +3994,7 @@ snapshots: colorette: 1.4.0 https-proxy-agent: 7.0.6(supports-color@10.2.2) js-levenshtein: 1.1.6 - js-yaml: 4.3.1 + js-yaml: 4.3.2 minimatch: 5.1.9 pluralize: 8.0.0 yaml-ast-parser: 0.0.43 @@ -4299,44 +4299,44 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/expect@4.1.8': + '@vitest/expect@4.1.11': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.8 - '@vitest/utils': 4.1.8 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.8(vite@6.4.3(jiti@1.21.7))': + '@vitest/mocker@4.1.11(vite@6.4.3(jiti@1.21.7))': dependencies: - '@vitest/spy': 4.1.8 + '@vitest/spy': 4.1.11 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 6.4.3(jiti@1.21.7) - '@vitest/pretty-format@4.1.8': + '@vitest/pretty-format@4.1.11': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.8': + '@vitest/runner@4.1.11': dependencies: - '@vitest/utils': 4.1.8 + '@vitest/utils': 4.1.11 pathe: 2.0.3 - '@vitest/snapshot@4.1.8': + '@vitest/snapshot@4.1.11': dependencies: - '@vitest/pretty-format': 4.1.8 - '@vitest/utils': 4.1.8 + '@vitest/pretty-format': 4.1.11 + '@vitest/utils': 4.1.11 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.8': {} + '@vitest/spy@4.1.11': {} - '@vitest/utils@4.1.8': + '@vitest/utils@4.1.11': dependencies: - '@vitest/pretty-format': 4.1.8 + '@vitest/pretty-format': 4.1.11 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -4664,7 +4664,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-yaml: 4.3.1 + js-yaml: 4.3.2 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 @@ -4954,7 +4954,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.3.1: + js-yaml@4.3.2: dependencies: argparse: 2.0.1 @@ -5617,7 +5617,7 @@ snapshots: '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.4) classnames: 2.5.1 diff: 8.0.4 - js-yaml: 4.3.1 + js-yaml: 4.3.2 memoize-one: 6.0.0 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -6088,15 +6088,15 @@ snapshots: fsevents: 2.3.3 jiti: 1.21.7 - vitest@4.1.8(jsdom@29.1.1)(vite@6.4.3(jiti@1.21.7)): + vitest@4.1.11(jsdom@29.1.1)(vite@6.4.3(jiti@1.21.7)): dependencies: - '@vitest/expect': 4.1.8 - '@vitest/mocker': 4.1.8(vite@6.4.3(jiti@1.21.7)) - '@vitest/pretty-format': 4.1.8 - '@vitest/runner': 4.1.8 - '@vitest/snapshot': 4.1.8 - '@vitest/spy': 4.1.8 - '@vitest/utils': 4.1.8 + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(vite@6.4.3(jiti@1.21.7)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 From bbdd4db2fbe1b489d9a4b51733c1d1723f9955a3 Mon Sep 17 00:00:00 2001 From: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> Date: Sun, 13 Sep 2026 14:52:40 +0800 Subject: [PATCH 3/3] fix(deploy): pull MinIO from Quay Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> --- charts/skillhub/tests/install-upgrade-smoke.sh | 2 +- deploy/runtime-mirror-images.txt | 2 +- docker-compose.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/charts/skillhub/tests/install-upgrade-smoke.sh b/charts/skillhub/tests/install-upgrade-smoke.sh index fd461d56..30934aff 100755 --- a/charts/skillhub/tests/install-upgrade-smoke.sh +++ b/charts/skillhub/tests/install-upgrade-smoke.sh @@ -84,7 +84,7 @@ spec: spec: containers: - name: minio - image: docker.io/minio/minio@sha256:14cea493d9a34af32f524e538b8346cf79f3321eff8e708c1e2960462bd8936e + image: quay.io/minio/minio@sha256:14cea493d9a34af32f524e538b8346cf79f3321eff8e708c1e2960462bd8936e args: - server - /data diff --git a/deploy/runtime-mirror-images.txt b/deploy/runtime-mirror-images.txt index 4ad7de89..c33b13f1 100644 --- a/deploy/runtime-mirror-images.txt +++ b/deploy/runtime-mirror-images.txt @@ -1,7 +1,7 @@ # source_image target_image postgres:16-alpine postgres:16-alpine redis:7-alpine redis:7-alpine -minio/minio:latest minio:latest +quay.io/minio/minio:latest minio:latest prom/prometheus:latest prometheus:latest grafana/grafana:latest grafana:latest nginx:alpine nginx:alpine diff --git a/docker-compose.yml b/docker-compose.yml index 77dc264b..a43078e7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -40,7 +40,7 @@ services: retries: 5 minio: - image: ${MINIO_IMAGE:-minio/minio:latest} + image: ${MINIO_IMAGE:-quay.io/minio/minio:latest} ports: - "9000:9000" - "9001:9001"