From 372bf6c6c27d1987c86c6b8dd4ec0c7873c85117 Mon Sep 17 00:00:00 2001 From: AstroHan Date: Thu, 3 Sep 2026 20:45:01 +0800 Subject: [PATCH 01/32] feat(website): publish the podling site from website/ maka.apache.org still returns 404, and #4307 settled what the site should say without giving it anywhere to live. This adds website/ as an Astro workspace with the homepage direction the thread voted for (D, Astryx Centered Hero), one English and one Chinese page sharing a single Copy type so neither can drift, a downloads page shaped like OpenDAL's, and the ASF footer with the Incubator disclaimer on every page. Publication follows OpenDAL: website.yml builds the site and force-pushes the output as an orphan commit, to asf-site on main and to site/-staging for release-candidate tags or a dispatched stage name; .asf.yaml carries the matching publish and autostage blocks and is copied into the published branch so its whoami guard matches there and nowhere else. The ASF header policy learns .astro files (frontmatter fence, then the block comment) and records why the footer copy may carry the ASF copyright line. Astro is pinned to 7.2.10 because 7.3.0 imports an internal module its own exports map does not expose, which fails every build that uses astro:assets. Refs #3404, #4307 Generated-by: Claude Code --- .asf.yaml | 9 + .github/workflows/website.yml | 103 + .gitignore | 3 + package-lock.json | 3068 +++++++++++++++++++++-- package.json | 3 +- scripts/asf-license-headers.mjs | 12 + website/README.md | 51 + website/astro.config.mjs | 34 + website/package.json | 17 + website/src/components/Downloads.astro | 76 + website/src/components/Home.astro | 165 ++ website/src/copy/en.ts | 185 ++ website/src/copy/links.ts | 60 + website/src/copy/types.ts | 96 + website/src/copy/zh-CN.ts | 174 ++ website/src/layouts/Site.astro | 112 + website/src/pages/en/downloads.astro | 24 + website/src/pages/en/index.astro | 24 + website/src/pages/index.astro | 22 + website/src/pages/zh-CN/downloads.astro | 24 + website/src/pages/zh-CN/index.astro | 24 + website/src/styles/site.css | 887 +++++++ website/test/site.test.mjs | 90 + website/tsconfig.json | 5 + 24 files changed, 5046 insertions(+), 222 deletions(-) create mode 100644 .github/workflows/website.yml create mode 100644 website/README.md create mode 100644 website/astro.config.mjs create mode 100644 website/package.json create mode 100644 website/src/components/Downloads.astro create mode 100644 website/src/components/Home.astro create mode 100644 website/src/copy/en.ts create mode 100644 website/src/copy/links.ts create mode 100644 website/src/copy/types.ts create mode 100644 website/src/copy/zh-CN.ts create mode 100644 website/src/layouts/Site.astro create mode 100644 website/src/pages/en/downloads.astro create mode 100644 website/src/pages/en/index.astro create mode 100644 website/src/pages/index.astro create mode 100644 website/src/pages/zh-CN/downloads.astro create mode 100644 website/src/pages/zh-CN/index.astro create mode 100644 website/src/styles/site.css create mode 100644 website/test/site.test.mjs create mode 100644 website/tsconfig.json diff --git a/.asf.yaml b/.asf.yaml index 453ff07f19..16fc23a06a 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -134,6 +134,15 @@ github: - name: main type: branch +# The website workflow copies this file into every branch it publishes, so the +# `whoami` guard matches there and nowhere else. See website/README.md. +staging: + profile: ~ + autostage: site/* + +publish: + whoami: asf-site + notifications: commits: commits@maka.apache.org discussions: dev@maka.apache.org diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml new file mode 100644 index 0000000000..db71be8937 --- /dev/null +++ b/.github/workflows/website.yml @@ -0,0 +1,103 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: Website + +# Builds website/ and publishes the output as an orphan commit. `.asf.yaml` +# serves `asf-site` at maka.apache.org and stages `site/-staging` at +# maka-.staged.apache.org. Pull requests validate the build through the +# website workspace's test:dist in ci.yml; this lane only publishes. +on: + push: + branches: [main] + tags: ['v*'] + paths: + - 'website/**' + - 'apps/desktop/assets/app-icons/sky.png' + - 'package.json' + - 'package-lock.json' + - 'LICENSE' + - 'NOTICE' + - '.asf.yaml' + - '.github/workflows/website.yml' + workflow_dispatch: + inputs: + stage: + description: Stage this ref at maka-.staged.apache.org instead of publishing it + required: false + type: string + +permissions: + contents: read + +concurrency: + group: website-${{ github.ref }} + cancel-in-progress: false + +jobs: + publish: + # Release tags publish nothing; only release candidates are staged. + if: github.event_name != 'push' || github.ref_type == 'branch' || contains(github.ref_name, 'rc') + runs-on: ubuntu-24.04 + timeout-minutes: 45 + permissions: + contents: write + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: '24' + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Build and check the site + run: npm --workspace @maka/website run test:dist + + - name: Choose the target branch + id: target + env: + STAGE: ${{ inputs.stage }} + run: | + if [[ -n "$STAGE" ]]; then + branch="site/$(printf '%s' "$STAGE" | tr -c 'a-z0-9' '-')-staging" + elif [[ "$GITHUB_REF_TYPE" == tag ]]; then + branch="site/$(printf '%s' "$GITHUB_REF_NAME" | tr '._' '--')-staging" + else + branch=asf-site + fi + echo "branch=$branch" >> "$GITHUB_OUTPUT" + + - name: Publish the build + env: + BRANCH: ${{ steps.target.outputs.branch }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + cp .asf.yaml LICENSE NOTICE website/dist/ + cd website/dist + git init -q -b "$BRANCH" + git config user.name 'github-actions[bot]' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + git add -A + git commit -q -m "Publish website from ${GITHUB_SHA}" + auth="$(printf 'x-access-token:%s' "$GITHUB_TOKEN" | base64 -w0)" + git -c "http.https://github.com/.extraheader=AUTHORIZATION: basic ${auth}" \ + push --force "https://github.com/${GITHUB_REPOSITORY}.git" "HEAD:refs/heads/${BRANCH}" diff --git a/.gitignore b/.gitignore index 46829faa83..7f296f9fdd 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,6 @@ apps/desktop/release-sources/ packages/cli/release/ packages/cli/.development/ release/asf/ + +# Astro type generation +.astro diff --git a/package-lock.json b/package-lock.json index a4bf3fe7f0..e95240fc3e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,8 @@ "packages/computer-use", "packages/cli", "packages/ui", - "apps/desktop" + "apps/desktop", + "website" ], "devDependencies": { "@ai-sdk/provider-utils": "5.0.28", @@ -364,6 +365,264 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/@astrojs/compiler-binding": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding/-/compiler-binding-0.4.0.tgz", + "integrity": "sha512-x2RjDUuWfwLNtc3mjAdSRInwqh/rqbLar9cm/5FOMbHvmYZB7yfKewzSclAxWjIZsypJDXv1lhaP2WG+P8TK3g==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@astrojs/compiler-binding-darwin-arm64": "0.4.0", + "@astrojs/compiler-binding-darwin-x64": "0.4.0", + "@astrojs/compiler-binding-linux-arm64-gnu": "0.4.0", + "@astrojs/compiler-binding-linux-arm64-musl": "0.4.0", + "@astrojs/compiler-binding-linux-x64-gnu": "0.4.0", + "@astrojs/compiler-binding-linux-x64-musl": "0.4.0", + "@astrojs/compiler-binding-wasm32-wasi": "0.4.0", + "@astrojs/compiler-binding-win32-arm64-msvc": "0.4.0", + "@astrojs/compiler-binding-win32-x64-msvc": "0.4.0" + } + }, + "node_modules/@astrojs/compiler-binding-darwin-arm64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-arm64/-/compiler-binding-darwin-arm64-0.4.0.tgz", + "integrity": "sha512-ZVUwHundaQyFNjE6uoa0usaC0WOCitDCLS/4mdb4rOiJXwVUuKJBMxI5WMzXLWmamsXtK/Z//ifLXvV5Yeh4Hw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-darwin-x64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-x64/-/compiler-binding-darwin-x64-0.4.0.tgz", + "integrity": "sha512-FI6G8AY8u6fR1SI/QRR5yGMwtvZwP34CDmZpZ5HwJGa50UM1VISTLhqkhV4a476pmgd25X1Aur2dqw6hUnrlKA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-arm64-gnu": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-gnu/-/compiler-binding-linux-arm64-gnu-0.4.0.tgz", + "integrity": "sha512-lB9gLFJK7m82EnjaU8nlRBEfcwGNeHidW3sSjODTUjMNaoewVuUz9fwwdY5M4jiSXIqWLH3yl6TX8FTDKA74Sw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-arm64-musl": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-musl/-/compiler-binding-linux-arm64-musl-0.4.0.tgz", + "integrity": "sha512-HPbvWqbxFxyaoQJhLxCaSjtYBx9KBo7JGVzEFZCmMl968a2PsSH0UfiODYgYPXofTOIsIH2aoCcrHXML0IA3ig==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-x64-gnu": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-gnu/-/compiler-binding-linux-x64-gnu-0.4.0.tgz", + "integrity": "sha512-tQKolMxoJ/+0AmLWm1PmJ/i+z3i10ZU1bNuVjEDulCf48azEMtUNjTZgHJ5MPtpYRNc7dlETr8QujUfduzoC7Q==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-x64-musl": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-musl/-/compiler-binding-linux-x64-musl-0.4.0.tgz", + "integrity": "sha512-5v5YymudsxMHp3NBLCS8BUlu5CRqeLtWD9cKS/4nIhIEHCbpz9okmVV6I0HWqmBAPhWYcDa3vw/vltYPrOQCTA==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-wasm32-wasi": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-wasm32-wasi/-/compiler-binding-wasm32-wasi-0.4.0.tgz", + "integrity": "sha512-m/phuH3x3PREvv1OnkM44NoPh4MatUadix1fB1u5SvMLCyDTUZykDJbKnWf1cjnYmHdlB8HcjTjl6JrCqAIXcw==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.2.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@astrojs/compiler-binding-win32-arm64-msvc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-arm64-msvc/-/compiler-binding-win32-arm64-msvc-0.4.0.tgz", + "integrity": "sha512-B9zYf3okEY83kM8gydlpH2BHP00w4ifxPqlYlWrgTwuD6wnkrJDCwBlgy1q31cERjCJRXN1lrE2VmkLvFjv/6g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-win32-x64-msvc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-x64-msvc/-/compiler-binding-win32-x64-msvc-0.4.0.tgz", + "integrity": "sha512-zB0Nrv0dGc0zZWPGDRmmETTPhDRqyZjAjk+gWMlVrJX5U89obpB3VUUE1ZiHxOCN5LQojeLK6O8L/dnoHolvNQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-rs": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-rs/-/compiler-rs-0.4.0.tgz", + "integrity": "sha512-koVikeon1kreEy+/JzLQRy3vzHHQVOjycs4degg4vFufKApZOwMZvSSAEztYNhmcQVfNVsVZZI4cEge3cexAbQ==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler-binding": "0.4.0" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.11.0.tgz", + "integrity": "sha512-3rzxJ+xbo0+8YyqOzLziIN32wmsHdCjEVz2sGOpRxJ+Ben/KiLph4ItxBy1abEL+E8fkRzqjg0rfXmaHJGw9JA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.4", + "@types/mdast": "^4.0.4", + "js-yaml": "^4.3.0", + "picomatch": "^4.0.4", + "retext-smartypants": "^6.2.0", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "unified": "^11.0.5" + } + }, + "node_modules/@astrojs/markdown-satteri": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.4.0.tgz", + "integrity": "sha512-wykOOW9KsUVcZweOpY/CeXpdKcCKZy6fQbdcteWFuI75+sQCiqxYM7VKsGa5b+aGl3cYQscFY37rsbbyal5MRw==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.11.0", + "@astrojs/prism": "4.0.2", + "github-slugger": "^2.0.0", + "satteri": "^0.10.3" + } + }, + "node_modules/@astrojs/prism": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz", + "integrity": "sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.3.tgz", + "integrity": "sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.4.0", + "dset": "^3.1.4", + "is-docker": "^4.0.0", + "package-manager-detector": "^1.6.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/telemetry/node_modules/is-docker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-4.0.0.tgz", + "integrity": "sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@astryxdesign/cli": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/@astryxdesign/cli/-/cli-0.4.5.tgz", @@ -685,7 +944,6 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -695,7 +953,6 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -729,7 +986,6 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.29.7" @@ -1016,7 +1272,6 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.29.7", @@ -1195,68 +1450,263 @@ "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==", "license": "MIT" }, - "node_modules/@chevrotain/types": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz", - "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==", - "license": "Apache-2.0" - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "node_modules/@bruits/satteri-darwin-arm64": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-arm64/-/satteri-darwin-arm64-0.10.5.tgz", + "integrity": "sha512-27KTVl4TJkVahMy/ohyA7qd4938G5UNneFUz/PsScYfpIhj0IVAS23mpcJXdPF44sa6nva198lmV/cKIb2YPyA==", + "cpu": [ + "arm64" + ], "license": "MIT", "optional": true, - "engines": { - "node": ">=0.1.90" - } + "os": [ + "darwin" + ] }, - "node_modules/@dnd-kit/accessibility": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz", - "integrity": "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==", - "dev": true, + "node_modules/@bruits/satteri-darwin-x64": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-x64/-/satteri-darwin-x64-0.10.5.tgz", + "integrity": "sha512-IjnLe3nKspq6qaeqGgjT7MT8VrTV74yWRlaag7ZdNsI8TDAYZ0iPxMCo+9KQZHUk5EyVB+reBI/PFWL5KuFw9Q==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@dnd-kit/core": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", - "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", - "dev": true, + "node_modules/@bruits/satteri-linux-arm64-gnu": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-gnu/-/satteri-linux-arm64-gnu-0.10.5.tgz", + "integrity": "sha512-glkYXZCJywjP13v67eAyAMSJdF+ncvEbYvgi/wOtffL9tQ27lr/zsyzUfgs+ovjJ9d8JNQKiXeiArJcX8PJL9w==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "@dnd-kit/accessibility": "^3.1.1", - "@dnd-kit/utilities": "^3.2.2", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@dnd-kit/sortable": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-10.0.0.tgz", - "integrity": "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==", - "dev": true, + "node_modules/@bruits/satteri-linux-arm64-musl": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-musl/-/satteri-linux-arm64-musl-0.10.5.tgz", + "integrity": "sha512-yWdgG1g17Nh2QyGVlFUxGRa3FEFwiMcpZEyMNWkbM3deC94cmVc+/i9OuyFpdKuWo3GkgoCtYVOoxk1uCnCZIA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], "license": "MIT", - "dependencies": { - "@dnd-kit/utilities": "^3.2.2", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@dnd-kit/core": "^6.3.0", - "react": ">=16.8.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@dnd-kit/utilities": { - "version": "3.2.2", + "node_modules/@bruits/satteri-linux-x64-gnu": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-gnu/-/satteri-linux-x64-gnu-0.10.5.tgz", + "integrity": "sha512-FVaLoPT1fBgGl0J+AYebyyXJYBachGl8Oyyrf1lye4RTqCB4S0Gwkj1uM9RJyThUOvx5VUmAT1CnNh1SFHA+kw==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-x64-musl": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-musl/-/satteri-linux-x64-musl-0.10.5.tgz", + "integrity": "sha512-EHpVAx2bqW3GINHTKkljtxVfQmVDGWIuwOYOP5YghTj+0PkBa2o8oKPRtQ9Kbsr1Fye8jtUcDjhwj2jMNugZKg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-wasm32-wasi": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-wasm32-wasi/-/satteri-wasm32-wasi-0.10.5.tgz", + "integrity": "sha512-ypz8c/Zmipxp4IoeDa228Gstv6TLzVmNs3yC6wKCoNSOjx1iwpgzu87Y3hTkXFdwChVGU85qeUDuOIarGUZQLw==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.2.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@bruits/satteri-win32-arm64-msvc": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-arm64-msvc/-/satteri-win32-arm64-msvc-0.10.5.tgz", + "integrity": "sha512-siTV88nb0LRqNpkL2gXboqCwVdq95sLtzMHS1/3eONV2gLbB3NAK46wmSMvCO/yquBvI2lvaFIfd8P12ecsxBw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@bruits/satteri-win32-x64-msvc": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-x64-msvc/-/satteri-win32-x64-msvc-0.10.5.tgz", + "integrity": "sha512-C3IfPvfvMXmlzBxaMPKFS1XiuV9pu2mC7YqkPk7PSvTgPZ8gbdASIpHpztDLvTTQjqZ0z1Ol8tK5X+V6XXC0wQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz", + "integrity": "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@chevrotain/types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz", + "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==", + "license": "Apache-2.0" + }, + "node_modules/@clack/core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.3.tgz", + "integrity": "sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==", + "license": "MIT", + "dependencies": { + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@clack/prompts": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.7.0.tgz", + "integrity": "sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==", + "license": "MIT", + "dependencies": { + "@clack/core": "1.4.3", + "fast-string-width": "^3.0.2", + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dnd-kit/accessibility": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz", + "integrity": "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/core": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", + "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@dnd-kit/accessibility": "^3.1.1", + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/sortable": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-10.0.0.tgz", + "integrity": "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.3.0", + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/utilities": { + "version": "3.2.2", "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.2.tgz", "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==", "dev": true, @@ -1679,7 +2129,6 @@ "version": "1.11.2", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.2.tgz", "integrity": "sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1691,7 +2140,6 @@ "version": "1.11.2", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.2.tgz", "integrity": "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1702,7 +2150,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1716,7 +2163,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1733,7 +2179,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1750,7 +2195,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1767,7 +2211,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1784,7 +2227,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1801,7 +2243,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1818,7 +2259,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1835,7 +2275,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1852,7 +2291,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1869,7 +2307,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1886,7 +2323,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1903,7 +2339,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1920,7 +2355,6 @@ "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1937,7 +2371,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1954,7 +2387,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1971,7 +2403,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1988,7 +2419,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2005,7 +2435,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2022,7 +2451,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2039,7 +2467,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2056,7 +2483,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2073,7 +2499,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2090,7 +2515,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2107,7 +2531,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2124,7 +2547,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2141,7 +2563,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2155,7 +2576,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/@fontsource-variable/geist/-/geist-5.3.0.tgz", "integrity": "sha512-j0m+vLQuG5XAYoHtGCVu0spvlGreR3EzpECUVzkFmI1mTVnAO38l/NEPDCFgZ177JxzYJCLSmTQibIiYPilGrA==", - "dev": true, "license": "OFL-1.1", "funding": { "url": "https://github.com/sponsors/ayuhito" @@ -2165,7 +2585,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/@fontsource-variable/geist-mono/-/geist-mono-5.3.0.tgz", "integrity": "sha512-vBbuwDEo9AkrqADMXOrlAR3DFcJi4/JxeuU43FoiQERnNwsfXNnvxvReZG02cQKmyk4DZkZdBZX3oTDvy2zBAw==", - "dev": true, "license": "OFL-1.1", "funding": { "url": "https://github.com/sponsors/ayuhito" @@ -2231,66 +2650,625 @@ "import-meta-resolve": "^4.2.0" } }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, "engines": { - "node": ">=18.0.0" + "node": ">=18" } }, - "node_modules/@jackwener/opencli": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@jackwener/opencli/-/opencli-1.8.6.tgz", - "integrity": "sha512-2+phJOV7JkSeQR4uOnapAkhSwQDjNzHYzlCXZJBYiYi7bUxQz95nGbGuXeTseprZWES0kysVGySH63B1HG51hw==", - "hasInstallScript": true, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.4.tgz", + "integrity": "sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==", + "cpu": [ + "arm64" + ], "license": "Apache-2.0", - "dependencies": { - "@mozilla/readability": "^0.6.0", - "cli-table3": "^0.6.5", - "commander": "^14.0.3", - "js-yaml": "^4.1.0", - "turndown": "^7.2.2", - "turndown-plugin-gfm": "^1.0.2", - "undici": "^6.27.0", - "ws": "^8.18.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" }, - "bin": { - "opencli": "dist/src/main.js" + "funding": { + "url": "https://opencollective.com/libvips" }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.3.3" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.4.tgz", + "integrity": "sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=20.0.0" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.3.3" } }, - "node_modules/@joshwooding/vite-plugin-react-docgen-typescript": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.7.0.tgz", - "integrity": "sha512-qvsTEwEFefhdirGOPnu9Wp6ChfIwy2dBCRuETU3uE+4cC+PFoxMSiiEhxk4lOluA34eARHA0OxqsEUYDqRMgeQ==", - "dev": true, - "license": "MIT", + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.4.tgz", + "integrity": "sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==", + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], "dependencies": { - "glob": "^13.0.1", - "react-docgen-typescript": "^2.2.2" + "@img/sharp-wasm32": "0.35.4" }, - "peerDependencies": { - "typescript": ">= 4.3.x", - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + "engines": { + "node": ">=20.9.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.3.tgz", + "integrity": "sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.3.tgz", + "integrity": "sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.3.tgz", + "integrity": "sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.3.tgz", + "integrity": "sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.3.tgz", + "integrity": "sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.3.tgz", + "integrity": "sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.3.tgz", + "integrity": "sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.3.tgz", + "integrity": "sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.3.tgz", + "integrity": "sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.3.tgz", + "integrity": "sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.4.tgz", + "integrity": "sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.4.tgz", + "integrity": "sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.4.tgz", + "integrity": "sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.4.tgz", + "integrity": "sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.4.tgz", + "integrity": "sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.4.tgz", + "integrity": "sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.3.3" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.4.tgz", + "integrity": "sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.3.3" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.4.tgz", + "integrity": "sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.3.3" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.4.tgz", + "integrity": "sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==", + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-wasm32/node_modules/@emnapi/runtime": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.4.tgz", + "integrity": "sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/sharp-wasm32": "0.35.4" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.4.tgz", + "integrity": "sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.4.tgz", + "integrity": "sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.4.tgz", + "integrity": "sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jackwener/opencli": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@jackwener/opencli/-/opencli-1.8.6.tgz", + "integrity": "sha512-2+phJOV7JkSeQR4uOnapAkhSwQDjNzHYzlCXZJBYiYi7bUxQz95nGbGuXeTseprZWES0kysVGySH63B1HG51hw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@mozilla/readability": "^0.6.0", + "cli-table3": "^0.6.5", + "commander": "^14.0.3", + "js-yaml": "^4.1.0", + "turndown": "^7.2.2", + "turndown-plugin-gfm": "^1.0.2", + "undici": "^6.27.0", + "ws": "^8.18.0" + }, + "bin": { + "opencli": "dist/src/main.js" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.7.0.tgz", + "integrity": "sha512-qvsTEwEFefhdirGOPnu9Wp6ChfIwy2dBCRuETU3uE+4cC+PFoxMSiiEhxk4lOluA34eARHA0OxqsEUYDqRMgeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^13.0.1", + "react-docgen-typescript": "^2.2.2" + }, + "peerDependencies": { + "typescript": ">= 4.3.x", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -2323,7 +3301,6 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -2388,6 +3365,10 @@ "resolved": "packages/ui", "link": true }, + "node_modules/@maka/website": { + "resolved": "website", + "link": true + }, "node_modules/@malept/cross-spawn-promise": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", @@ -2616,22 +3597,24 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", - "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", - "dev": true, + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.3.tgz", + "integrity": "sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==", "license": "MIT", "optional": true, "dependencies": { "@tybys/wasm-util": "^0.10.3" }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/Brooooooklyn" }, "peerDependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1" + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" } }, "node_modules/@noble/hashes": { @@ -2669,6 +3652,12 @@ } } }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, "node_modules/@oxc-parser/binding-android-arm-eabi": { "version": "0.127.0", "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.127.0.tgz", @@ -3458,7 +4447,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3475,7 +4463,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3492,7 +4479,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3509,7 +4495,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3526,7 +4511,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3543,7 +4527,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3560,7 +4543,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3577,7 +4559,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3594,7 +4575,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3611,7 +4591,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3628,7 +4607,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3645,7 +4623,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3662,7 +4639,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3679,7 +4655,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3696,7 +4671,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3710,7 +4684,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", - "dev": true, "license": "MIT" }, "node_modules/@rollup/pluginutils": { @@ -3736,6 +4709,106 @@ } } }, + "node_modules/@shikijs/core": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.3.tgz", + "integrity": "sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==", + "license": "MIT", + "dependencies": { + "@shikijs/primitive": "4.4.3", + "@shikijs/types": "4.4.3", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5", + "hast-util-to-html": "^9.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.3.tgz", + "integrity": "sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.3", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.6" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.3.tgz", + "integrity": "sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.3", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/langs": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.3.tgz", + "integrity": "sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/primitive": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.3.tgz", + "integrity": "sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.3", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/themes": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.3.tgz", + "integrity": "sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/types": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.3.tgz", + "integrity": "sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, "node_modules/@sigstore/bundle": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-5.0.0.tgz", @@ -4091,7 +5164,6 @@ "version": "0.10.3", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -4455,9 +5527,17 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, "license": "MIT" }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", @@ -4474,6 +5554,15 @@ "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", "license": "MIT" }, + "node_modules/@types/hast": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -4491,6 +5580,15 @@ "@types/node": "*" } }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/ms": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", @@ -4498,6 +5596,15 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/node": { "version": "26.2.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-26.2.0.tgz", @@ -4564,6 +5671,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, "node_modules/@types/ws": { "version": "8.18.1", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", @@ -4914,6 +6027,12 @@ "node": ">=16.20.0" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", + "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", + "license": "ISC" + }, "node_modules/@upsetjs/venn.js": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz", @@ -5164,6 +6283,18 @@ } } }, + "node_modules/am-i-vibing": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/am-i-vibing/-/am-i-vibing-0.4.0.tgz", + "integrity": "sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==", + "license": "MIT", + "dependencies": { + "process-ancestry": "^0.1.0" + }, + "bin": { + "am-i-vibing": "dist/cli.mjs" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -5188,6 +6319,31 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/app-builder-lib": { "version": "26.15.3", "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.15.3.tgz", @@ -5577,6 +6733,25 @@ "proxy-from-env": "^2.1.0" } }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", @@ -6018,6 +7193,16 @@ ], "license": "CC-BY-4.0" }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chai": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", @@ -6052,6 +7237,26 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/check-error": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", @@ -6062,6 +7267,21 @@ "node": ">= 16" } }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/chownr": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", @@ -6083,7 +7303,6 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", - "dev": true, "funding": [ { "type": "github", @@ -6188,6 +7407,16 @@ "node": ">= 0.8" } }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/commander": { "version": "14.0.3", "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", @@ -6197,6 +7426,15 @@ "node": ">=20" } }, + "node_modules/common-ancestor-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz", + "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">= 18" + } + }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -6262,6 +7500,12 @@ "node": ">= 0.6" } }, + "node_modules/cookie-es": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz", + "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==", + "license": "MIT" + }, "node_modules/cookie-signature": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", @@ -6329,6 +7573,15 @@ "node": ">= 8" } }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, "node_modules/css-mediaquery": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", @@ -6356,6 +7609,19 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, "node_modules/css-what": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-8.0.0.tgz", @@ -6376,6 +7642,39 @@ "dev": true, "license": "MIT" }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -7058,6 +8357,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "license": "MIT" + }, "node_modules/delaunator": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz", @@ -7090,17 +8395,21 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">=8" @@ -7114,6 +8423,34 @@ "license": "MIT", "optional": true }, + "node_modules/devalue": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.9.2.tgz", + "integrity": "sha512-po4PAY5c53tw5XMocSnf8A/5OHhbbUftpr93aEN6BBoAdntUmK7vu7wOATqvt7cXO7m1Cl4gMVn6p7n6n4mj0w==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz", + "integrity": "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dijkstrajs": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", @@ -7316,6 +8653,15 @@ "url": "https://dotenvx.com" } }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -7796,6 +9142,12 @@ "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", + "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", + "license": "MIT" + }, "node_modules/es-object-atoms": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", @@ -7846,7 +9198,6 @@ "version": "0.28.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -8054,12 +9405,33 @@ "express": ">= 4.11" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, "node_modules/fast-uri": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz", @@ -8076,6 +9448,15 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, "node_modules/fastdom": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastdom/-/fastdom-1.0.12.tgz", @@ -8099,7 +9480,6 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -8200,7 +9580,16 @@ "pkg-dir": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=6" + } + }, + "node_modules/find-proc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/find-proc/-/find-proc-0.1.0.tgz", + "integrity": "sha512-OaOpEYv2PiQ7SQ5LIrl+deA1XaWcxEjnpM6VuWXTUvn+teIXxeFTLDmu18/zDQpFmHN4o3oDBX+BT0AGwEhemg==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, "node_modules/find-up": { @@ -8226,6 +9615,15 @@ "micromatch": "^4.0.2" } }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/flow-estree": { "version": "0.325.0", "resolved": "https://registry.npmjs.org/flow-estree/-/flow-estree-0.325.0.tgz", @@ -8269,6 +9667,27 @@ } } }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz", + "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/form-data": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", @@ -8377,7 +9796,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -8494,6 +9912,12 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, "node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -8615,6 +10039,23 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, + "node_modules/h3": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz", + "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.3", + "crossws": "^0.3.5", + "defu": "^6.1.6", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, "node_modules/hachure-fill": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", @@ -8683,6 +10124,42 @@ "node": ">= 0.4" } }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hono": { "version": "4.12.34", "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.34.tgz", @@ -8732,6 +10209,16 @@ "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", "license": "MIT" }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/htmlparser2": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", @@ -8834,7 +10321,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "dev": true, "license": "BSD-2-Clause" }, "node_modules/http-errors": { @@ -9049,6 +10535,15 @@ "node": ">= 0.10" } }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, "node_modules/is-core-module": { "version": "2.16.2", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", @@ -9119,6 +10614,18 @@ "node": ">=0.12.0" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -9213,7 +10720,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", - "dev": true, + "devOptional": true, "license": "MIT", "bin": { "jiti": "lib/jiti-cli.mjs" @@ -9381,7 +10888,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true, "license": "MIT" }, "node_modules/jsonfile": { @@ -9891,7 +11397,6 @@ "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", - "dev": true, "license": "MPL-2.0", "dependencies": { "detect-libc": "^2.0.3" @@ -9924,7 +11429,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9945,7 +11449,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9966,7 +11469,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9987,7 +11489,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -10008,7 +11509,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -10029,7 +11529,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -10050,7 +11549,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -10071,7 +11569,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -10092,7 +11589,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -10113,7 +11609,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -10134,7 +11629,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -10303,6 +11797,17 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/magicast": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.4.tgz", + "integrity": "sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "source-map-js": "^1.2.1" + } + }, "node_modules/maka-agent": { "resolved": "packages/cli", "link": true @@ -10366,6 +11871,33 @@ "node": ">= 0.4" } }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, "node_modules/media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", @@ -10431,6 +11963,95 @@ "node": ">= 20" } }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -10586,6 +12207,15 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -10596,7 +12226,6 @@ "version": "3.3.18", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", - "dev": true, "funding": [ { "type": "github", @@ -10628,6 +12257,28 @@ "dev": true, "license": "MIT" }, + "node_modules/neotraverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-1.0.1.tgz", + "integrity": "sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/node-abi": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.33.0.tgz", @@ -10683,6 +12334,12 @@ "node": ">=10" } }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, "node_modules/node-gyp": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.4.0.tgz", @@ -10764,6 +12421,12 @@ "dev": true, "license": "MIT" }, + "node_modules/node-mock-http": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.5.tgz", + "integrity": "sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==", + "license": "MIT" + }, "node_modules/node-pty": { "version": "1.2.0-beta.15", "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.2.0-beta.15.tgz", @@ -10800,6 +12463,15 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -10861,6 +12533,36 @@ "node": ">= 0.4" } }, + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.12.tgz", + "integrity": "sha512-65S/5gk9YSsaRjcyf7Nfa6h/d3E8/1gslpXfI4W7Dxn/oap8IKRuNT5VXkLQ1YFKIEg4apRY4Pj6aiwFzrDdmw==", + "license": "MIT" + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -10884,6 +12586,23 @@ "wrappy": "1" } }, + "node_modules/oniguruma-parser": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", + "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", + "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.2", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, "node_modules/open": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", @@ -11341,18 +13060,22 @@ "url": "https://github.com/sponsors/jet2jet" } }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -11575,7 +13298,6 @@ "version": "8.5.26", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -11658,6 +13380,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/proc-log": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", @@ -11668,6 +13399,15 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/process-ancestry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/process-ancestry/-/process-ancestry-0.1.0.tgz", + "integrity": "sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -11711,6 +13451,16 @@ "signal-exit": "^3.0.2" } }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/protobufjs": { "version": "7.6.5", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.5.tgz", @@ -11851,6 +13601,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, "node_modules/range-parser": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", @@ -11994,6 +13750,19 @@ "dev": true, "license": "MIT" }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/recast": { "version": "0.23.12", "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.12.tgz", @@ -12038,6 +13807,30 @@ "node": ">=8" } }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, "node_modules/require-addon": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/require-addon/-/require-addon-1.2.0.tgz", @@ -12125,7 +13918,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" @@ -12144,6 +13936,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -12255,7 +14062,6 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.5.tgz", "integrity": "sha512-VD2IE5PUG4Oj8zz2VGykiYd5wbnjdIiSsNQb8Qu5B+noEp+A78mu2iVvpp27g8es14Tk9rofNs5Tku9iQCS4fA==", - "dev": true, "license": "MIT", "dependencies": { "@oxc-project/types": "=0.146.0", @@ -12289,7 +14095,6 @@ "version": "0.146.0", "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.146.0.tgz", "integrity": "sha512-XC0QsnnhVe7sLIWmYmdPw7x5P0h4W8vUU3Nv1ySgWXtvCz8NizoAEpGXA0sOYoJQV2Rl13LgURAHQ5cI5ILCSA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/Boshen" @@ -12375,6 +14180,29 @@ "truncate-utf8-bytes": "^1.0.0" } }, + "node_modules/satteri": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/satteri/-/satteri-0.10.5.tgz", + "integrity": "sha512-Ao1LKpAEa9Wdg0otgbVKViZHEq9ebdXe4DMrp3s9vQAU0HNIuHnFEuMuOcm0ZIXyV0Yzxj91NvhLpvXZJO/5ZQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.5", + "@types/hast": "^3.0.5", + "@types/mdast": "^4.0.4", + "@types/unist": "^3.0.3" + }, + "optionalDependencies": { + "@bruits/satteri-darwin-arm64": "0.10.5", + "@bruits/satteri-darwin-x64": "0.10.5", + "@bruits/satteri-linux-arm64-gnu": "0.10.5", + "@bruits/satteri-linux-arm64-musl": "0.10.5", + "@bruits/satteri-linux-x64-gnu": "0.10.5", + "@bruits/satteri-linux-x64-musl": "0.10.5", + "@bruits/satteri-wasm32-wasi": "0.10.5", + "@bruits/satteri-win32-arm64-msvc": "0.10.5", + "@bruits/satteri-win32-x64-msvc": "0.10.5" + } + }, "node_modules/sax": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", @@ -12516,6 +14344,69 @@ "node": ">=8" } }, + "node_modules/sharp": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.4.tgz", + "integrity": "sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.1.0", + "detect-libc": "^2.1.2", + "semver": "^7.8.5" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.35.4", + "@img/sharp-darwin-x64": "0.35.4", + "@img/sharp-freebsd-wasm32": "0.35.4", + "@img/sharp-libvips-darwin-arm64": "1.3.3", + "@img/sharp-libvips-darwin-x64": "1.3.3", + "@img/sharp-libvips-linux-arm": "1.3.3", + "@img/sharp-libvips-linux-arm64": "1.3.3", + "@img/sharp-libvips-linux-ppc64": "1.3.3", + "@img/sharp-libvips-linux-riscv64": "1.3.3", + "@img/sharp-libvips-linux-s390x": "1.3.3", + "@img/sharp-libvips-linux-x64": "1.3.3", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.3", + "@img/sharp-libvips-linuxmusl-x64": "1.3.3", + "@img/sharp-linux-arm": "0.35.4", + "@img/sharp-linux-arm64": "0.35.4", + "@img/sharp-linux-ppc64": "0.35.4", + "@img/sharp-linux-riscv64": "0.35.4", + "@img/sharp-linux-s390x": "0.35.4", + "@img/sharp-linux-x64": "0.35.4", + "@img/sharp-linuxmusl-arm64": "0.35.4", + "@img/sharp-linuxmusl-x64": "0.35.4", + "@img/sharp-webcontainers-wasm32": "0.35.4", + "@img/sharp-win32-arm64": "0.35.4", + "@img/sharp-win32-ia32": "0.35.4", + "@img/sharp-win32-x64": "0.35.4" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -12537,6 +14428,25 @@ "node": ">=8" } }, + "node_modules/shiki": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.3.tgz", + "integrity": "sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.4.3", + "@shikijs/engine-javascript": "4.4.3", + "@shikijs/engine-oniguruma": "4.4.3", + "@shikijs/langs": "4.4.3", + "@shikijs/themes": "4.4.3", + "@shikijs/types": "4.4.3", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/side-channel": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", @@ -12662,6 +14572,12 @@ "node": ">=10" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, "node_modules/slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", @@ -12686,7 +14602,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.8.0.tgz", "integrity": "sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">= 18" @@ -12746,7 +14661,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -12763,6 +14677,16 @@ "source-map": "^0.6.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -13208,6 +15132,20 @@ "node": ">=8" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -13308,6 +15246,153 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svgo": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.1.0.tgz", + "integrity": "sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^6.0.0", + "css-tree": "^3.0.1", + "css-what": "^7.0.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "1.6.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/svgo/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/svgo/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/svgo/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/tar": { "version": "7.5.22", "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", @@ -13381,6 +15466,12 @@ "semver": "bin/semver" } }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", @@ -13394,6 +15485,15 @@ "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", "license": "MIT" }, + "node_modules/tinyclip": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.15.tgz", + "integrity": "sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==", + "license": "MIT", + "engines": { + "node": "^16.14.0 || >= 17.3.0" + } + }, "node_modules/tinyexec": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", @@ -13407,7 +15507,6 @@ "version": "0.2.17", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", - "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -13483,6 +15582,26 @@ "node": ">=0.6" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -13521,7 +15640,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, + "devOptional": true, "license": "0BSD" }, "node_modules/tuf-js": { @@ -13639,36 +15758,161 @@ "@typescript/typescript-win32-x64": "7.0.2" } }, - "node_modules/uhyphen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/uhyphen/-/uhyphen-0.2.0.tgz", - "integrity": "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==", - "license": "ISC" + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "license": "MIT" + }, + "node_modules/uhyphen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/uhyphen/-/uhyphen-0.2.0.tgz", + "integrity": "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==", + "license": "ISC" + }, + "node_modules/ultrahtml": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.7.0.tgz", + "integrity": "sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==", + "license": "MIT" + }, + "node_modules/unbash": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/unbash/-/unbash-4.0.10.tgz", + "integrity": "sha512-b7zoBQvpWp0vuN5q2vK2RRBR2SvuruQAs50DApdDveBSn3eSYd84IaHodFqQIMlvY9K2VnyBUEXgwOBuGU9GBg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", + "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/undici-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.5.tgz", + "integrity": "sha512-ULe/Cs+ZIsq+dcFofNkhqielCrUJnb5mr+Yc4EBM2VlL+6OZR6+cjtI2mT1bJvRBrVncqHAbLURxmPLcCXzWMg==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ohash": "^2.0.11", + "undici": "^8.0.0" + } + }, + "node_modules/unifont/node_modules/undici": { + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.10.1.tgz", + "integrity": "sha512-YQ3WlbqjYMmNpdvDH64jAgLjxuAR9+649calDWhbshYaeQGO2bR4nI94ORJmwI3J9YhoKQnpyGOK+0zlWS5N5Q==", + "license": "MIT", + "engines": { + "node": ">=22.19.0" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/unbash": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/unbash/-/unbash-4.0.10.tgz", - "integrity": "sha512-b7zoBQvpWp0vuN5q2vK2RRBR2SvuruQAs50DApdDveBSn3eSYd84IaHodFqQIMlvY9K2VnyBUEXgwOBuGU9GBg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/undici": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", - "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", "license": "MIT", - "engines": { - "node": ">=18.17" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/undici-types": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", - "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", - "license": "MIT" + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, "node_modules/universalify": { "version": "2.0.1", @@ -13705,6 +15949,111 @@ "node": ">=18.12.0" } }, + "node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/unstorage/node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/unzipper": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.12.5.tgz", @@ -13812,11 +16161,38 @@ "node": ">= 0.8" } }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/vite": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", - "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.33.0", @@ -13890,6 +16266,25 @@ } } }, + "node_modules/vitefu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, "node_modules/walk-up-path": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", @@ -14043,6 +16438,12 @@ "node": ">=8.0" } }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", @@ -14120,9 +16521,9 @@ } }, "node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.5.4.tgz", + "integrity": "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -14138,6 +16539,16 @@ "zod": "^3.25.28 || ^4" } }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "packages/cli": { "name": "maka-agent", "version": "0.2.0", @@ -14409,6 +16820,221 @@ "@types/react-dom": "^19.2.4", "linkedom": "^0.18.13" } + }, + "website": { + "name": "@maka/website", + "version": "0.0.0", + "dependencies": { + "@fontsource-variable/geist": "^5.3.0", + "@fontsource-variable/geist-mono": "^5.3.0", + "astro": "^7.2.10" + } + }, + "website/node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "website/node_modules/astro": { + "version": "7.2.10", + "resolved": "https://registry.npmjs.org/astro/-/astro-7.2.10.tgz", + "integrity": "sha512-uPtD+nK6kQXugyq4kiMPwj9OI3Sae6HSerA5X+fuv2CPaDwxmokFPPFlGRKIAXH0QAKu+zot2q6yrLG61wFmqg==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler-rs": "^0.4.0", + "@astrojs/internal-helpers": "0.11.0", + "@astrojs/markdown-satteri": "0.4.0", + "@astrojs/telemetry": "3.3.3", + "@capsizecss/unpack": "^4.0.0", + "@clack/prompts": "^1.1.0", + "@oslojs/encoding": "^1.1.0", + "am-i-vibing": "^0.4.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "ci-info": "^4.4.0", + "clsx": "^2.1.1", + "common-ancestor-path": "^2.0.0", + "cookie": "^2.0.1", + "devalue": "^5.8.1", + "diff": "^9.0.0", + "dset": "^3.1.4", + "es-module-lexer": "^2.0.0", + "esbuild": "^0.28.0", + "find-proc": "0.1.0", + "flattie": "^1.1.1", + "fontace": "~0.4.1", + "get-tsconfig": "5.0.0-beta.4", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "js-yaml": "^4.3.0", + "jsonc-parser": "^3.3.1", + "magic-string": "^1.0.0", + "magicast": "^0.5.2", + "mrmime": "^2.0.1", + "neotraverse": "^1.0.1", + "obug": "^2.1.1", + "p-limit": "^7.3.0", + "p-queue": "^9.1.0", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.4", + "semver": "^7.7.4", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "svgo": "^4.0.1", + "tinyclip": "^0.1.12", + "tinyexec": "^1.0.4", + "tinyglobby": "^0.2.15", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.5", + "unstorage": "^1.17.5", + "vite": "^8.0.13", + "vitefu": "^1.1.2", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^22.0.0", + "zod": "^4.3.6" + }, + "bin": { + "astro": "bin/astro.mjs" + }, + "engines": { + "node": ">=22.12.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.35.4" + }, + "peerDependencies": { + "@astrojs/markdown-remark": "^7.3.0" + }, + "peerDependenciesMeta": { + "@astrojs/markdown-remark": { + "optional": true + } + } + }, + "website/node_modules/cookie": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==", + "license": "MIT", + "engines": { + "node": ">=22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "website/node_modules/get-tsconfig": { + "version": "5.0.0-beta.4", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.4.tgz", + "integrity": "sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "engines": { + "node": ">=20.20.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "website/node_modules/magic-string": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.2.3.tgz", + "integrity": "sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "website/node_modules/p-limit": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.2.tgz", + "integrity": "sha512-Ll0w3fU24vYpXoZmjjZIee6bJQDgG0oAyo1PdmFYI8UDwJJddaHAypxIH9avUu+t+lSsAwKVsb1jDCMIIChliw==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.2.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "website/node_modules/p-queue": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.3.tgz", + "integrity": "sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "website/node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "website/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "website/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "website/node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index d2d65b5aa9..86b97fc986 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ "packages/computer-use", "packages/cli", "packages/ui", - "apps/desktop" + "apps/desktop", + "website" ], "scripts": { "prepare": "npm run sync:model-metadata && node scripts/install-husky.mjs", diff --git a/scripts/asf-license-headers.mjs b/scripts/asf-license-headers.mjs index 81707ed697..ec44abf3a7 100644 --- a/scripts/asf-license-headers.mjs +++ b/scripts/asf-license-headers.mjs @@ -99,6 +99,9 @@ const commentStyles = { close: '-->', prefixPattern: /^(?:\n|---\n[\s\S]*?\n---\n)/i, }, + // An Astro component opens with its frontmatter fence, and the header is the + // first thing inside it. + astro: { open: '/*', line: ' *', close: ' */', prefixPattern: /^---\n/ }, }; /** @@ -106,6 +109,7 @@ const commentStyles = { * for each. A covered file must carry the header; nothing else may. */ const coveredExtensions = new Map([ + ['.astro', 'astro'], ['.cjs', 'block'], ['.css', 'block'], ['.html', 'html'], @@ -307,6 +311,14 @@ const provenanceMarkers = [ * they may carry the ASF header anyway. */ const reviewedProvenance = new Map([ + [ + 'website/src/copy/en.ts', + 'Website footer copy. The copyright line it carries is the ASF’s own, as the site footer must show it.', + ], + [ + 'website/src/copy/zh-CN.ts', + 'Website footer copy. The copyright line it carries is the ASF’s own, as the site footer must show it.', + ], [ '.github/ASF_SOURCE_HEADERS.md', 'Documents the marker patterns; the match is the policy describing its own rule.', diff --git a/website/README.md b/website/README.md new file mode 100644 index 0000000000..48f6436abf --- /dev/null +++ b/website/README.md @@ -0,0 +1,51 @@ + + +# maka.apache.org + +The podling website: a bilingual homepage and a downloads page, built with Astro and published through `.asf.yaml`. Docs, security policy, community, releases and architecture stay authoritative where they already live in this repository; the site links to them and copies nothing. + +```sh +npm --workspace @maka/website run dev # http://localhost:4321/en/ +npm --workspace @maka/website run build # website/dist +npm --workspace @maka/website run test:dist +``` + +## Content + +- The positioning sentence, the page structure and the three download paths follow the consensus in [#4307](https://github.com/apache/maka/discussions/4307). The homepage direction (Astryx Centered Hero) was chosen by vote in the same thread. +- English and Chinese are one page each in `src/copy/`. Both share the `Copy` type in `src/copy/types.ts`, so a section, claim or link added to one language fails to type-check until the other has it too, and `test/site.test.mjs` asserts the built pages link the same documents. Yuhan Lei (@Astro-Han) keeps the two in sync. +- Numbers on the homepage are drawn from the reports in [`docs/eval/`](../docs/eval/) and link to them. The reports own the numbers. +- Fact-check cadence: the homepage is re-read against the product at every release, and whenever the positioning, the primary journey, platform support or the trust boundary changes. The README's *Get Maka* section, `SECURITY.md` and `docs/eval/` are the sources to check against. + +## Design + +Colour, radius and surface tokens are the desktop app's defaults, copied by value from `apps/desktop/src/renderer/maka-tokens.css` into `src/styles/site.css`. The site follows the viewer's colour scheme. Fonts are Geist and Geist Mono (SIL Open Font License 1.1), self-hosted from the `@fontsource-variable` packages the desktop app already depends on; nothing loads from a third party. The logo is `apps/desktop/assets/app-icons/sky.png`, the same file the README uses. + +## Publishing + +`.github/workflows/website.yml` builds the site and pushes `website/dist` plus `.asf.yaml`, `LICENSE` and `NOTICE` as an orphan commit: + +| Trigger | Branch | Served at | +| --- | --- | --- | +| Push to `main` touching the site | `asf-site` | https://maka.apache.org | +| Push of a release-candidate tag (`v*rc*`) | `site/-staging` | https://maka-.staged.apache.org | +| `workflow_dispatch` with a `stage` name | `site/-staging` | https://maka-.staged.apache.org | + +`.asf.yaml` carries `publish: whoami: asf-site` and `staging: autostage: site/*`, the same layout Apache OpenDAL uses. Nothing else in the repository is published. diff --git a/website/astro.config.mjs b/website/astro.config.mjs new file mode 100644 index 0000000000..c61401fc22 --- /dev/null +++ b/website/astro.config.mjs @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + site: 'https://maka.apache.org', + trailingSlash: 'always', + // Both languages live under their own prefix; the root redirects to /en/. + i18n: { + defaultLocale: 'en', + locales: ['en', 'zh-CN'], + routing: { + prefixDefaultLocale: true, + redirectToDefaultLocale: true, + }, + }, +}); diff --git a/website/package.json b/website/package.json new file mode 100644 index 0000000000..c41f90293c --- /dev/null +++ b/website/package.json @@ -0,0 +1,17 @@ +{ + "name": "@maka/website", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "astro dev", + "build": "astro build", + "preview": "astro preview", + "test:dist": "astro build && node --test test/site.test.mjs" + }, + "dependencies": { + "@fontsource-variable/geist": "^5.3.0", + "@fontsource-variable/geist-mono": "^5.3.0", + "astro": "^7.2.10" + } +} diff --git a/website/src/components/Downloads.astro b/website/src/components/Downloads.astro new file mode 100644 index 0000000000..3c259534d2 --- /dev/null +++ b/website/src/components/Downloads.astro @@ -0,0 +1,76 @@ +--- +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import Site from '../layouts/Site.astro'; +import { links, localized } from '../copy/links'; +import type { Copy } from '../copy/types'; + +interface Props { + copy: Copy; +} + +const { copy } = Astro.props; +const d = copy.downloads; +const l = copy.locale; + +// Archive naming follows scripts/asf-source-release.mjs; is the +// release version, for example 0.1.0. +const archive = 'apache-maka--incubating-src.tar.gz'; +const verify = [ + `curl -O ${links.dist}KEYS`, + 'gpg --import KEYS', + `curl -O ${links.dist}/${archive}`, + `curl -O ${links.dist}/${archive}.asc`, + `curl -O ${links.dist}/${archive}.sha512`, + `gpg --verify ${archive}.asc ${archive}`, + `shasum -a 512 -c ${archive}.sha512`, +].join('\n'); +const build = [ + 'git clone https://github.com/apache/maka.git', + 'cd maka', + 'npm ci', + 'npm run build', +].join('\n'); +--- + + +
+

{d.title}

+

{d.lede}

+ +

{d.releases.h2}

+ {d.releases.note} +

{d.releases.p}

+

{d.releases.distNote} {links.dist}

+ +

{d.verify.h2}

+

{d.verify.p}

+
{verify}
+ +

{d.nightly.h2}

+ {d.nightly.note} +

{d.nightly.p} {d.nightly.windows}

+

{copy.hero.nightly}

+ +

{d.source.h2}

+

{d.source.requirements}

+
{build}
+

{d.source.after}

+
+
diff --git a/website/src/components/Home.astro b/website/src/components/Home.astro new file mode 100644 index 0000000000..95e87a6606 --- /dev/null +++ b/website/src/components/Home.astro @@ -0,0 +1,165 @@ +--- +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import Site from '../layouts/Site.astro'; +import { links, localized } from '../copy/links'; +import type { Copy } from '../copy/types'; + +interface Props { + copy: Copy; +} + +const { copy } = Astro.props; +const l = copy.locale; +const downloads = `/${l}/downloads/`; + +// Pass@1 from docs/eval/terminal-bench-2.1-deepseek-v4-flash-nine-arm.md. +// The report owns these numbers; this figure only draws them. +const leaderboard = [ + ['Codex', 82.0], + ['Maka', 77.5], + ['Pi', 74.2], + ['DSH', 73.0], + ['ZCode', 70.8], + ['Reasonix', 67.4], + ['OpenCode', 65.2], + ['Kimi Code', 59.6], + ['Claude Code', 55.1], +] as const; + +const reads = [ + { ...copy.reads.blogLog, href: localized.blogLog[l] }, + { ...copy.reads.blogTools, href: localized.blogTools[l] }, + { ...copy.reads.nineArm, href: links.nineArm }, + { ...copy.reads.paired, href: links.paired }, +]; +--- + + +
+
{copy.hero.eyebrow}
+

{copy.hero.headline[0]}{copy.hero.headline[1]}{copy.hero.headline[2]}

+

{copy.hero.lede}

+ +
{copy.hero.fine} · {copy.hero.architecture}
+ + +
+ +
+
+

{copy.measured.h2}

+

{copy.measured.p}

+
+
+
+

{copy.leaderboard.h3}

+

{copy.leaderboard.p}

+ {copy.leaderboard.more} +
+
+ {leaderboard.map(([name, pct], index) => ( +
+ {index + 1} + {name} +
+ {pct.toFixed(1)}% +
+ ))} +
{copy.leaderboard.caption}
+
+
+
+
+

{copy.paired.h3}

+

{copy.paired.p}

+ {copy.paired.more} +
{copy.paired.stat}{copy.paired.statSmall}
+
+
+

{copy.host.h3}

+

{copy.host.p}

+ {copy.host.more} +
+
{copy.host.clients.map((client) => {client})}
+
+
{copy.host.core}{copy.host.coreSmall}
+
+
+
+

{copy.log.h3}

+

{copy.log.p}

+ {copy.log.more} +
+ {copy.scene.events.map((event) => ( + {event.name} + ))} + +
+
+ +
+
+ +
+
+

{copy.reads.h2}

+

{copy.reads.p}

+
+ +
+
diff --git a/website/src/copy/en.ts b/website/src/copy/en.ts new file mode 100644 index 0000000000..e7fd91ec07 --- /dev/null +++ b/website/src/copy/en.ts @@ -0,0 +1,185 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import type { Copy } from './types'; + +// The Incubator disclaimer is quoted verbatim from the Incubator branding +// guide and appears in English on every page, whatever the page language. +export const incubatorDisclaimer = + 'Apache Maka is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.'; + +export const en: Copy = { + locale: 'en', + langLabel: 'EN', + siteName: 'Apache Maka (Incubating)', + positioning: + 'Apache Maka (Incubating) is a high-performance agent workspace that keeps a complete record of everything it did.', + nav: { + docs: 'Docs', + downloads: 'Downloads', + benchmarks: 'Benchmarks', + community: 'Community', + security: 'Security', + asf: 'ASF', + getMaka: 'Get Maka', + }, + hero: { + eyebrow: 'Apache Maka (Incubating)', + headline: [ + 'A high-performance agent workspace that ', + 'keeps a complete record', + ' of everything it did.', + ], + lede: 'An agent harness exists to finish tasks. We hold it to one measure, how many it completes and what that costs, and we publish every run: same model, same official verifier, full per-task record.', + nightly: 'Try Desktop Nightly', + source: 'Build from source', + fine: 'Nightly is a developer build, not an ASF release', + architecture: 'Read the architecture', + }, + scene: { + events: [ + { tone: 'mut', name: 'Text', detail: '"I\'ll rerun the failing test."' }, + { tone: '', name: 'FunctionCall', detail: 'Bash · npm test' }, + { tone: 'warn', name: 'permissionRequest', detail: 'leaves the sandbox' }, + { tone: 'ok', name: 'permissionDecision', detail: 'approved by you' }, + { tone: '', name: 'FunctionResponse', detail: 'exit 1 · pruned, kept' }, + { tone: 'dim', name: 'FunctionCall', detail: 'Edit · resume.ts' }, + { tone: 'dim ok', name: 'endInvocation', detail: 'Run completed' }, + ], + highWater: 'highWater', + caption: 'one turn · seven RuntimeEvents · append-only', + formula: 'State(t) = Project(Log[0…t])', + }, + measured: { + h2: 'Measured, not claimed. Recorded, not remembered.', + p: 'Two things the site can prove today: where Maka stands against other harnesses on the same model, and what the runtime actually writes down while it works.', + }, + leaderboard: { + h3: 'Nine harnesses, one model, the official verifier', + p: 'Terminal-Bench 2.1 on DeepSeek V4 Flash, every task, scored by the official verifier. The ranking is descriptive; the per-task CSV ships with the report.', + more: 'Read the report', + caption: 'pass@1 · reasoning max · cost/pass Maka $0.026', + }, + paired: { + h3: 'Head to head, same suite', + p: 'A paired single run against OpenCode on the same tasks. The gap holds up under an exact McNemar test on this suite, and cost per accepted task was at parity.', + more: 'Read the paired report', + stat: '+13.5', + statSmall: 'pp · 68.5% vs 55.1%', + }, + host: { + h3: 'One Runtime Host', + p: 'Desktop, TUI, CLI and Eval are thin clients of one execution authority.', + more: 'How the host works', + clients: ['Desktop', 'TUI / CLI', 'Eval'], + core: 'Runtime Host', + coreSmall: 'owns execution', + }, + log: { + h3: 'The log is the runtime', + p: 'Every message, tool call, permission decision and termination is an append-only RuntimeEvent. The UI, the next prompt and crash recovery are projections of that log, never the only copy.', + more: 'Log Is the Runtime', + }, + get: { + h3: 'Get Maka', + p: 'Three paths, kept separate on purpose.', + nightly: { + title: 'Try Desktop Nightly', + body: 'Daily builds from main for developers and testers, published on GitHub Releases. Apple Silicon Macs now; Windows is an unsigned preview.', + note: 'NOT AN ASF RELEASE · MAY BE UNSTABLE', + }, + source: { + title: 'Build from source', + body: 'Clone apache/maka, then npm ci and npm run build. Desktop, TUI and CLI share one Runtime Host.', + note: 'APACHE-2.0', + }, + releases: { + title: 'Apache Releases', + body: 'Maka has not made an Apache release yet. When one exists, the signed source archive is the release; installers are convenience artifacts.', + note: 'KEYS · SHA-512 · .asc', + }, + }, + reads: { + h2: 'Reports and writing', + p: 'Everything the homepage claims links to a report or a document that owns the numbers.', + blogLog: { + cover: 'State(t) =\nProject(Log[0…t])', + small: 'docs/blogs', + h3: 'Log Is the Runtime', + meta: 'Kun Li · English / 中文', + }, + blogTools: { + cover: 'Deferred\ntools', + small: 'docs/blogs', + h3: 'Beyond Function Calling: How Agents Reach the Real World', + meta: 'Kun Li · English / 中文', + }, + nineArm: { + cover: '69 / 89', + small: 'docs/eval · nine-arm', + h3: 'Terminal-Bench 2.1, nine harnesses', + meta: 'Report and per-task CSV', + }, + paired: { + cover: 'p = 0.0118', + small: 'docs/eval · paired', + h3: 'Maka vs OpenCode', + meta: 'Report and per-task CSV', + }, + }, + footer: { + foundation: 'Foundation', + license: 'License', + events: 'Events', + privacy: 'Privacy', + security: 'Security', + sponsorship: 'Sponsorship', + thanks: 'Thanks', + disclaimer: incubatorDisclaimer, + trademark: + 'Copyright © 2026 The Apache Software Foundation, licensed under the Apache License, Version 2.0. Apache Maka, Apache Incubator, Apache and the Apache feather logo are trademarks of The Apache Software Foundation.', + }, + downloads: { + title: 'Downloads', + lede: 'The signed source archive is the release. Everything else on this page is a convenience build, and says so.', + releases: { + h2: 'Apache releases', + note: 'NO APACHE RELEASE YET', + p: 'Apache Maka (Incubating) has not made an Apache release. When the first one passes its vote, this section lists it: the source archive, its SHA-512 checksum and detached GPG signature from the ASF distribution directory, and the KEYS file the signature verifies against.', + distNote: 'Until then the distribution directory does not exist:', + }, + verify: { + h2: 'Verify a release', + p: 'Every Apache release is verified the same way. Import the release managers’ keys, check the signature, then the checksum:', + }, + nightly: { + h2: 'Desktop Nightly', + note: 'NOT AN ASF RELEASE', + p: 'Desktop Nightly is built daily from main for developers and testers and published as a GitHub prerelease. Choose the newest Maka Desktop Nightly; after installation the app updates itself on the Nightly channel. It is not an ASF release and is not intended for production use. It targets Apple Silicon Macs.', + windows: 'Windows is an unsigned preview, not a supported release tier.', + }, + source: { + h2: 'Build from source', + requirements: + 'You need Node.js 22.19 or newer, npm 11, Git, and ripgrep, which the Grep tool shells out to.', + after: + 'CONTRIBUTING covers the workspace layout and how to start Desktop, the TUI and the CLI from that build.', + }, + }, +}; diff --git a/website/src/copy/links.ts b/website/src/copy/links.ts new file mode 100644 index 0000000000..1ddbc61415 --- /dev/null +++ b/website/src/copy/links.ts @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// Every document the site points at stays authoritative where it lives. The +// site links; it does not copy. +const repo = 'https://github.com/apache/maka'; +const main = `${repo}/blob/main`; + +export const links = { + repo, + releases: `${repo}/releases`, + discussions: `${repo}/discussions`, + devList: 'https://lists.apache.org/list.html?dev@maka.apache.org', + docs: `${main}/docs/README.md`, + eval: `${repo}/tree/main/docs/eval`, + nineArm: `${main}/docs/eval/terminal-bench-2.1-deepseek-v4-flash-nine-arm.md`, + paired: `${main}/docs/eval/terminal-bench-2.1-deepseek-v4-flash-maka-vs-opencode.md`, + security: `${main}/SECURITY.md`, + windows: `${main}/docs/windows-support.md`, + asf: 'https://www.apache.org/', + incubator: 'https://incubator.apache.org/', + license: 'https://www.apache.org/licenses/', + events: 'https://www.apache.org/events/current-event.html', + privacy: 'https://privacy.apache.org/policies/privacy-policy-public.html', + asfSecurity: 'https://www.apache.org/security/', + sponsorship: 'https://www.apache.org/foundation/sponsorship.html', + thanks: 'https://www.apache.org/foundation/thanks.html', + dist: 'https://downloads.apache.org/incubator/maka/', +}; + +// Documents that exist in both languages. The English file is the authority; +// the zh-CN file sits beside it with the same name and a `.zh-CN.md` suffix. +const bilingual = (path: string) => ({ + en: `${main}/${path}.md`, + 'zh-CN': `${main}/${path}.zh-CN.md`, +}); + +export const localized = { + architecture: bilingual('ARCHITECTURE'), + contributing: bilingual('CONTRIBUTING'), + runtimeHost: bilingual('docs/architecture/runtime-host-architecture'), + blogLog: bilingual('docs/blogs/log-is-the-runtime'), + blogTools: bilingual('docs/blogs/beyond-function-calling'), +}; diff --git a/website/src/copy/types.ts b/website/src/copy/types.ts new file mode 100644 index 0000000000..9b2efd1710 --- /dev/null +++ b/website/src/copy/types.ts @@ -0,0 +1,96 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export type Locale = 'en' | 'zh-CN'; + +// One shape for both languages, so a section, claim or link added to one +// page cannot be forgotten on the other: the type checker refuses it. +export interface Copy { + locale: Locale; + langLabel: string; + siteName: string; + positioning: string; + nav: { + docs: string; + downloads: string; + benchmarks: string; + community: string; + security: string; + asf: string; + getMaka: string; + }; + hero: { + eyebrow: string; + headline: [string, string, string]; + lede: string; + nightly: string; + source: string; + fine: string; + architecture: string; + }; + scene: { + events: Array<{ + tone: '' | 'mut' | 'warn' | 'ok' | 'dim' | 'dim ok'; + name: string; + detail: string; + }>; + highWater: string; + caption: string; + formula: string; + }; + measured: { h2: string; p: string }; + leaderboard: { h3: string; p: string; more: string; caption: string }; + paired: { h3: string; p: string; more: string; stat: string; statSmall: string }; + host: { h3: string; p: string; more: string; clients: string[]; core: string; coreSmall: string }; + log: { h3: string; p: string; more: string }; + get: { + h3: string; + p: string; + nightly: { title: string; body: string; note: string }; + source: { title: string; body: string; note: string }; + releases: { title: string; body: string; note: string }; + }; + reads: { + h2: string; + p: string; + blogLog: { cover: string; small: string; h3: string; meta: string }; + blogTools: { cover: string; small: string; h3: string; meta: string }; + nineArm: { cover: string; small: string; h3: string; meta: string }; + paired: { cover: string; small: string; h3: string; meta: string }; + }; + footer: { + foundation: string; + license: string; + events: string; + privacy: string; + security: string; + sponsorship: string; + thanks: string; + disclaimer: string; + trademark: string; + }; + downloads: { + title: string; + lede: string; + releases: { h2: string; note: string; p: string; distNote: string }; + verify: { h2: string; p: string }; + nightly: { h2: string; note: string; p: string; windows: string }; + source: { h2: string; requirements: string; after: string }; + }; +} diff --git a/website/src/copy/zh-CN.ts b/website/src/copy/zh-CN.ts new file mode 100644 index 0000000000..389f7d08e9 --- /dev/null +++ b/website/src/copy/zh-CN.ts @@ -0,0 +1,174 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { incubatorDisclaimer } from './en'; +import type { Copy } from './types'; + +export const zhCN: Copy = { + locale: 'zh-CN', + langLabel: '中文', + siteName: 'Apache Maka (Incubating)', + positioning: 'Apache Maka (Incubating) 是一个高性能的 Agent 工作台,完整记录它做过的每一件事。', + nav: { + docs: '文档', + downloads: '下载', + benchmarks: '跑分', + community: '社区', + security: '安全', + asf: 'ASF', + getMaka: '获取 Maka', + }, + hero: { + eyebrow: 'Apache Maka (Incubating)', + headline: ['一个高性能的 Agent 工作台,', '完整记录', '它做过的每一件事。'], + lede: 'Agent harness 的存在是为了把任务做完。我们只用一把尺子衡量它:完成了多少,花了多少;并公开每一次运行:同一个模型,同一个官方验证器,逐任务的完整记录。', + nightly: '试用 Desktop Nightly', + source: '从源码构建', + fine: 'Nightly 是开发者构建,不是 ASF release', + architecture: '阅读架构文档', + }, + scene: { + events: [ + { tone: 'mut', name: 'Text', detail: '「我重跑一下失败的测试。」' }, + { tone: '', name: 'FunctionCall', detail: 'Bash · npm test' }, + { tone: 'warn', name: 'permissionRequest', detail: '越出沙箱' }, + { tone: 'ok', name: 'permissionDecision', detail: '你已批准' }, + { tone: '', name: 'FunctionResponse', detail: 'exit 1 · 已裁剪,仍保留' }, + { tone: 'dim', name: 'FunctionCall', detail: 'Edit · resume.ts' }, + { tone: 'dim ok', name: 'endInvocation', detail: '运行完成' }, + ], + highWater: 'highWater', + caption: '一轮对话 · 七个 RuntimeEvent · 只追加', + formula: 'State(t) = Project(Log[0…t])', + }, + measured: { + h2: '只讲测出来的,只信记下来的。', + p: '这个站点今天能证明两件事:在同一个模型上,Maka 相对其它 harness 站在哪里;以及 runtime 工作时到底写下了什么。', + }, + leaderboard: { + h3: '九个 harness,一个模型,官方验证器', + p: '在 DeepSeek V4 Flash 上跑完 Terminal-Bench 2.1 的全部任务,由官方验证器判分。排名是描述性的,逐任务 CSV 随报告一起公开。', + more: '阅读报告', + caption: 'pass@1 · reasoning max · Maka 每次通过成本 $0.026', + }, + paired: { + h3: '同一套题,正面对比', + p: '与 OpenCode 在同一批任务上做配对单次运行。差距在这套题上经得起精确 McNemar 检验,每个通过任务的成本持平。', + more: '阅读配对报告', + stat: '+13.5', + statSmall: 'pp · 68.5% 对 55.1%', + }, + host: { + h3: '唯一的 Runtime Host', + p: 'Desktop、TUI、CLI 和 Eval 都是同一个执行权威的瘦客户端。', + more: 'Host 如何工作', + clients: ['Desktop', 'TUI / CLI', 'Eval'], + core: 'Runtime Host', + coreSmall: '掌管执行', + }, + log: { + h3: '日志就是运行时', + p: '每条消息、每次工具调用、每个权限决定和每次终止,都是一条只追加的 RuntimeEvent。界面、下一个 prompt 和崩溃恢复都是这份日志的投影,从来不是唯一副本。', + more: 'Log Is the Runtime', + }, + get: { + h3: '获取 Maka', + p: '三条路径,刻意分开。', + nightly: { + title: '试用 Desktop Nightly', + body: '每天从 main 构建,面向开发者和测试者,发布在 GitHub Releases。目前支持 Apple Silicon Mac;Windows 是未签名预览。', + note: '不是 ASF RELEASE · 可能不稳定', + }, + source: { + title: '从源码构建', + body: '克隆 apache/maka,然后 npm ci 和 npm run build。Desktop、TUI 和 CLI 共用一个 Runtime Host。', + note: 'APACHE-2.0', + }, + releases: { + title: 'Apache Releases', + body: 'Maka 还没有发布过 Apache release。发布之后,签名的源码包才是 release,安装包只是便利产物。', + note: 'KEYS · SHA-512 · .asc', + }, + }, + reads: { + h2: '报告与文章', + p: '首页的每一条主张都链接到一份拥有这些数字的报告或文档。', + blogLog: { + cover: 'State(t) =\nProject(Log[0…t])', + small: 'docs/blogs', + h3: 'Log Is the Runtime', + meta: '李坤 · English / 中文', + }, + blogTools: { + cover: 'Deferred\ntools', + small: 'docs/blogs', + h3: 'Beyond Function Calling:Agent 如何触达真实世界', + meta: '李坤 · English / 中文', + }, + nineArm: { + cover: '69 / 89', + small: 'docs/eval · nine-arm', + h3: 'Terminal-Bench 2.1,九个 harness', + meta: '报告与逐任务 CSV', + }, + paired: { + cover: 'p = 0.0118', + small: 'docs/eval · paired', + h3: 'Maka 对 OpenCode', + meta: '报告与逐任务 CSV', + }, + }, + footer: { + foundation: '基金会', + license: '许可证', + events: '活动', + privacy: '隐私', + security: '安全', + sponsorship: '赞助', + thanks: '致谢', + disclaimer: incubatorDisclaimer, + trademark: + 'Copyright © 2026 The Apache Software Foundation,以 Apache License, Version 2.0 授权。Apache Maka、Apache Incubator、Apache 与 Apache 羽毛标志是 The Apache Software Foundation 的商标。', + }, + downloads: { + title: '下载', + lede: '签名的源码包才是 release。本页其它内容都是便利构建,并且都会写明。', + releases: { + h2: 'Apache releases', + note: '尚无 APACHE RELEASE', + p: 'Apache Maka (Incubating) 还没有发布过 Apache release。第一个 release 投票通过后,这里会列出它:源码包、ASF 分发目录里的 SHA-512 校验和与分离的 GPG 签名,以及签名所对应的 KEYS 文件。', + distNote: '在此之前,分发目录尚不存在:', + }, + verify: { + h2: '验证 release', + p: '每个 Apache release 的验证方式都一样:导入 release manager 的公钥,验签,再核对校验和。', + }, + nightly: { + h2: 'Desktop Nightly', + note: '不是 ASF RELEASE', + p: 'Desktop Nightly 每天从 main 构建,面向开发者和测试者,以 GitHub prerelease 的形式发布。选择最新的 Maka Desktop Nightly;安装后应用会在 Nightly 渠道自动更新。它不是 ASF release,也不适合生产使用。目前面向 Apple Silicon Mac。', + windows: 'Windows 是未签名预览,不是受支持的发布层级。', + }, + source: { + h2: '从源码构建', + requirements: '需要 Node.js 22.19 或更新版本、npm 11、Git,以及 Grep 工具依赖的 ripgrep。', + after: 'CONTRIBUTING 说明了 workspace 布局,以及如何从这份构建启动 Desktop、TUI 和 CLI。', + }, + }, +}; diff --git a/website/src/layouts/Site.astro b/website/src/layouts/Site.astro new file mode 100644 index 0000000000..cb454ed699 --- /dev/null +++ b/website/src/layouts/Site.astro @@ -0,0 +1,112 @@ +--- +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import '@fontsource-variable/geist'; +import '@fontsource-variable/geist-mono'; +import '../styles/site.css'; +import { Image } from 'astro:assets'; +import logo from '../../../apps/desktop/assets/app-icons/sky.png'; +import { links } from '../copy/links'; +import type { Copy, Locale } from '../copy/types'; + +interface Props { + copy: Copy; + page: 'home' | 'downloads'; + title: string; + description: string; +} + +const { copy, page, title, description } = Astro.props; +const locales: Locale[] = ['en', 'zh-CN']; +const path = page === 'home' ? '' : `${page}/`; +const href = (locale: Locale) => `/${locale}/${path}`; +const canonical = new URL(href(copy.locale), Astro.site); +const home = href(copy.locale); +const downloads = `/${copy.locale}/downloads/`; +--- + + + + + + {title} + + + {locales.map((locale) => )} + + + + +
+ + + + + +
+ + diff --git a/website/src/pages/en/downloads.astro b/website/src/pages/en/downloads.astro new file mode 100644 index 0000000000..71a18f0ffd --- /dev/null +++ b/website/src/pages/en/downloads.astro @@ -0,0 +1,24 @@ +--- +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import Downloads from '../../components/Downloads.astro'; +import { en } from '../../copy/en'; +--- + + diff --git a/website/src/pages/en/index.astro b/website/src/pages/en/index.astro new file mode 100644 index 0000000000..d15bdf7150 --- /dev/null +++ b/website/src/pages/en/index.astro @@ -0,0 +1,24 @@ +--- +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import Home from '../../components/Home.astro'; +import { en } from '../../copy/en'; +--- + + diff --git a/website/src/pages/index.astro b/website/src/pages/index.astro new file mode 100644 index 0000000000..ef5222fffb --- /dev/null +++ b/website/src/pages/index.astro @@ -0,0 +1,22 @@ +--- +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +// The static build turns this into a meta-refresh page at /. +return Astro.redirect('/en/'); +--- diff --git a/website/src/pages/zh-CN/downloads.astro b/website/src/pages/zh-CN/downloads.astro new file mode 100644 index 0000000000..bd45307fb4 --- /dev/null +++ b/website/src/pages/zh-CN/downloads.astro @@ -0,0 +1,24 @@ +--- +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import Downloads from '../../components/Downloads.astro'; +import { zhCN } from '../../copy/zh-CN'; +--- + + diff --git a/website/src/pages/zh-CN/index.astro b/website/src/pages/zh-CN/index.astro new file mode 100644 index 0000000000..d8021fd392 --- /dev/null +++ b/website/src/pages/zh-CN/index.astro @@ -0,0 +1,24 @@ +--- +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import Home from '../../components/Home.astro'; +import { zhCN } from '../../copy/zh-CN'; +--- + + diff --git a/website/src/styles/site.css b/website/src/styles/site.css new file mode 100644 index 0000000000..7e968fd656 --- /dev/null +++ b/website/src/styles/site.css @@ -0,0 +1,887 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* Colour and radius tokens are the desktop app's defaults, copied by value + from apps/desktop/src/renderer/maka-tokens.css and astryx-theme/maka.css. + The site follows the viewer's colour scheme; there is no toggle. */ +:root { + color-scheme: light dark; + --background: light-dark(oklch(1 0 0), oklch(0.205 0.004 286)); + --foreground: light-dark(oklch(0.17 0.005 286), oklch(0.95 0.004 286)); + --accent: light-dark(oklch(0.7 0.135 250), oklch(0.74 0.15 250)); + --success: light-dark(oklch(0.5 0.17 145), oklch(0.6 0.17 145)); + --warning: light-dark(oklch(0.5 0.18 55), oklch(0.66 0.18 55)); + --surface-sunken: light-dark( + oklch(from var(--background) calc(l - 0.055) c h), + oklch(from var(--background) calc(l - 0.065) c h) + ); + --surface-base: oklch(from var(--background) calc(l - 0.025) c h); + --surface-raised: var(--background); + --muted-foreground: color-mix(in oklch, var(--foreground) 68%, var(--background)); + --accent-solid: light-dark( + oklch(from var(--accent) 0.48 c h), + oklch(from var(--accent) 0.76 c h) + ); + --success-text: color-mix(in oklab, var(--success) 50%, var(--foreground)); + --warning-text: color-mix(in oklab, var(--warning) 50%, var(--foreground)); + --border: oklch(from var(--foreground) l c h / 0.1); + --radius-page: 28px; + --radius-container: 12px; + --radius-element: 8px; + --tint: color-mix(in srgb, var(--accent-solid) 9%, var(--surface-raised)); + --page: light-dark(var(--surface-raised), var(--surface-base)); + --plain: light-dark(var(--surface-base), var(--surface-raised)); + --font-family-body: + "Geist Variable", -apple-system, BlinkMacSystemFont, system-ui, "Segoe UI", Roboto, + "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "Noto Sans SC", + sans-serif; + --font-family-code: + "Geist Mono Variable", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace; +} + +html { + margin: 0; + background: var(--page); + color: var(--foreground); + font-family: var(--font-family-body); + font-size: 14px; + line-height: 1.5; + -webkit-font-smoothing: antialiased; +} +body { + margin: 0; +} +a { + color: inherit; + text-decoration: none; +} +code { + font-family: var(--font-family-code); +} +.wrap { + max-width: 1200px; + margin: 0 auto; + padding: 0 32px; +} +:focus-visible { + outline: 2px solid var(--accent-solid); + outline-offset: 2px; +} + +/* Top navigation */ +.nav { + height: 60px; + display: flex; + align-items: center; + gap: 4px; +} +.nav .brand { + display: flex; + align-items: center; + gap: 10px; + font-weight: 600; + font-size: 15px; + margin-right: 20px; + white-space: nowrap; +} +.nav .brand img { + width: 26px; + height: 26px; + border-radius: var(--radius-element); +} +.nav .brand small { + font-weight: 500; + font-size: 11px; + color: var(--accent-solid); + background: var(--tint); + border-radius: 999px; + padding: 2px 8px; +} +.nav .links { + display: flex; + gap: 2px; +} +.nav .links a { + padding: 6px 12px; + border-radius: 999px; + color: var(--muted-foreground); + font-weight: 500; +} +.nav .links a:hover, +.nav .links a[aria-current="page"] { + background: var(--surface-sunken); + color: var(--foreground); +} +.nav .sp { + flex: 1; +} +.lang { + display: inline-flex; + border: 1px solid var(--border); + border-radius: 999px; + overflow: hidden; + font-size: 12px; + font-weight: 500; +} +.lang a, +.lang span { + padding: 5px 10px; + color: var(--muted-foreground); +} +.lang .on { + background: var(--foreground); + color: var(--page); +} +.btn { + display: inline-flex; + align-items: center; + gap: 8px; + height: 40px; + padding: 0 18px; + border-radius: 999px; + font-weight: 500; + font-size: 14px; + border: 1px solid transparent; + white-space: nowrap; +} +.btn.primary { + background: var(--foreground); + color: var(--page); +} +.btn.secondary { + background: var(--tint); + color: var(--foreground); +} +.btn.sm { + height: 34px; + padding: 0 14px; + font-size: 13px; +} +.btn .arr { + font-family: var(--font-family-code); +} + +/* Hero: the Astryx Centered Hero template */ +.hero { + padding: 64px 0 24px; + text-align: center; +} +.eyebrow { + display: inline-flex; + align-items: center; + gap: 8px; + font: 500 12px / 1 var(--font-family-code); + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--muted-foreground); +} +.eyebrow i { + width: 8px; + height: 8px; + border-radius: 50%; + background: var(--accent-solid); +} +h1.display { + font-size: clamp(32px, 5vw, 52px); + line-height: 1.12; + font-weight: 500; + letter-spacing: -0.03em; + margin: 18px auto 14px; + max-width: 18ch; + text-wrap: balance; +} +h1.display b { + font-weight: 600; +} +.lede { + font-size: 17px; + line-height: 1.55; + color: var(--muted-foreground); + max-width: 60ch; + margin: 0 auto 26px; + text-wrap: balance; +} +.cta { + display: flex; + justify-content: center; + gap: 10px; + align-items: center; + flex-wrap: wrap; +} +.fine { + margin-top: 14px; + font-size: 12.5px; + color: var(--muted-foreground); +} +.fine a, +.sec-h p a, +.tile p a { + color: var(--accent-solid); + text-decoration: underline; + text-underline-offset: 3px; +} + +/* Hero scene: one turn of RuntimeEvents on a page-radius tinted ground */ +.scene { + margin: 40px auto 0; + border-radius: var(--radius-page); + background: var(--tint); + overflow: hidden; + position: relative; + height: 360px; + display: grid; + place-items: center; +} +.turn { + position: relative; + display: grid; + grid-template-columns: repeat(7, 1fr); + gap: 10px; + width: calc(100% - 64px); + align-items: center; +} +.turn .rail { + position: absolute; + left: 24px; + right: 24px; + top: 50%; + height: 1px; + background: color-mix(in srgb, var(--foreground) 18%, transparent); +} +.turn .hwline { + position: absolute; + top: -52px; + bottom: -52px; + left: calc(5 / 7 * 100% - 7px); + width: 2px; + background: var(--accent-solid); + border-radius: 2px; +} +.turn .hwline span { + position: absolute; + top: -2px; + left: 10px; + font: 500 11px / 1 var(--font-family-code); + color: var(--accent-solid); + white-space: nowrap; +} +.ev-pill { + position: relative; + background: var(--surface-raised); + border-radius: 16px; + padding: 14px 12px 12px; + box-shadow: + 0 1px 2px rgba(0, 0, 0, 0.06), + 0 6px 20px -8px rgba(0, 0, 0, 0.18); + display: flex; + flex-direction: column; + gap: 4px; + min-width: 0; + text-align: left; +} +.ev-pill i { + width: 10px; + height: 10px; + border-radius: 50%; + background: var(--accent-solid); + margin-bottom: 4px; +} +.ev-pill b { + font: 500 11px / 1.3 var(--font-family-code); + color: var(--accent-solid); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.ev-pill small { + font-size: 11.5px; + color: var(--muted-foreground); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.ev-pill.mut i { + background: var(--muted-foreground); +} +.ev-pill.mut b { + color: var(--foreground); +} +.ev-pill.warn i { + background: var(--warning-text); +} +.ev-pill.warn b { + color: var(--warning-text); +} +.ev-pill.ok i { + background: var(--success-text); +} +.ev-pill.ok b { + color: var(--success-text); +} +.ev-pill.dim { + opacity: 0.45; + box-shadow: none; + background: color-mix(in srgb, var(--surface-raised) 60%, transparent); +} +.turn .ev-pill:nth-child(odd) { + transform: translateY(-34px); +} +.turn .ev-pill:nth-child(even) { + transform: translateY(34px); +} +.tape-cap { + position: absolute; + left: 24px; + right: 24px; + bottom: 18px; + display: flex; + gap: 22px; + font: 500 11px / 1 var(--font-family-code); + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--muted-foreground); +} +.tape-cap .hw { + margin-left: auto; + color: var(--accent-solid); + text-transform: none; + letter-spacing: 0; +} + +/* Sections */ +.sec { + padding: 72px 0 0; +} +.sec-h { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 40px; + align-items: end; + margin-bottom: 28px; +} +h2 { + font-size: 34px; + line-height: 1.18; + font-weight: 600; + letter-spacing: -0.025em; + margin: 0; + text-wrap: balance; +} +.sec-h p { + margin: 0; + color: var(--muted-foreground); + font-size: 15px; + max-width: 52ch; +} + +/* Bento */ +.bento { + display: grid; + grid-template-columns: repeat(12, 1fr); + grid-auto-rows: minmax(120px, auto); + gap: 16px; +} +.tile { + background: var(--tint); + border-radius: 20px; + padding: 26px 26px 22px; + display: flex; + flex-direction: column; + gap: 8px; + min-height: 0; + min-width: 0; +} +.tile.plain { + background: var(--plain); +} +.tile h3 { + margin: 0; + font-size: 19px; + font-weight: 600; + letter-spacing: -0.01em; +} +.tile p { + margin: 0; + color: var(--muted-foreground); + font-size: 14px; + max-width: 46ch; +} +.tile .more { + margin-top: 4px; + font-weight: 500; + font-size: 14px; + color: var(--foreground); +} +.tile .more::after { + content: " →"; +} +.tile .fig { + margin-top: auto; + padding-top: 18px; +} +.c3 { + grid-column: span 3; +} +.c4 { + grid-column: span 4; +} +.c5 { + grid-column: span 5; +} +.c7 { + grid-column: span 7; +} +.c12 { + grid-column: span 12; +} +.r2 { + grid-row: span 2; +} + +/* Leaderboard as rows */ +.lb { + background: var(--surface-raised); + border-radius: var(--radius-container); + overflow: hidden; + border: 1px solid var(--border); +} +.lb .row { + display: grid; + grid-template-columns: 22px 96px 1fr 58px; + gap: 10px; + align-items: center; + padding: 7px 12px; + font-size: 12.5px; + border-bottom: 1px solid var(--border); +} +.lb .row:last-of-type { + border-bottom: 0; +} +.lb .rk { + color: var(--muted-foreground); + font-family: var(--font-family-code); + font-size: 11px; +} +.lb .tr { + height: 6px; + border-radius: 999px; + background: var(--surface-sunken); + overflow: hidden; +} +.lb .fi { + height: 100%; + background: color-mix(in oklch, var(--foreground) 24%, transparent); + border-radius: 999px; +} +.lb .pc { + text-align: right; + font-variant-numeric: tabular-nums; + font-weight: 500; +} +.lb .row.me { + background: var(--tint); +} +.lb .row.me .fi { + background: var(--accent-solid); +} +.lb .row.me .nm, +.lb .row.me .pc { + color: var(--accent-solid); + font-weight: 600; +} +.lb .cap { + padding: 8px 12px; + font: 11px / 1.5 var(--font-family-code); + color: var(--muted-foreground); + background: var(--surface-sunken); +} + +/* Big stat */ +.stat { + font-size: 56px; + font-weight: 600; + letter-spacing: -0.04em; + line-height: 1; + font-variant-numeric: tabular-nums; +} +.stat small { + font-size: 16px; + font-weight: 500; + color: var(--muted-foreground); + letter-spacing: 0; + margin-left: 8px; +} + +/* Runtime Host diagram */ +.host { + display: grid; + grid-template-columns: 1fr auto 1fr; + gap: 14px; + align-items: center; + font-size: 12.5px; +} +.host .col { + display: flex; + flex-direction: column; + gap: 6px; +} +.host .chip { + background: var(--surface-raised); + border: 1px solid var(--border); + border-radius: var(--radius-element); + padding: 6px 10px; + font-weight: 500; +} +.host .core { + background: var(--foreground); + color: var(--page); + border-radius: var(--radius-container); + padding: 14px 16px; + font-weight: 600; + text-align: center; + line-height: 1.3; +} +.host .core small { + display: block; + font-weight: 400; + opacity: 0.7; + font-size: 11px; +} +.host .lines { + font-family: var(--font-family-code); + color: var(--muted-foreground); + font-size: 11px; + text-align: center; +} + +/* Event chips */ +.evs { + display: flex; + gap: 6px; + flex-wrap: wrap; + align-items: center; +} +.evs .e { + font: 500 11.5px / 1 var(--font-family-code); + padding: 7px 10px; + border-radius: 999px; + background: var(--surface-raised); + color: var(--accent-solid); + border: 1px solid var(--border); +} +.evs .e.mut { + color: var(--muted-foreground); +} +.evs .e.warn { + color: var(--warning-text); +} +.evs .e.ok { + color: var(--success-text); +} +.evs .cur { + width: 8px; + height: 22px; + border-radius: 2px; + background: var(--accent-solid); +} + +/* Get Maka: three paths */ +.tile.get { + flex-direction: row; + gap: 40px; + align-items: flex-start; +} +.get-h { + flex: 0 0 240px; + display: flex; + flex-direction: column; + gap: 8px; +} +.paths3 { + flex: 1; + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 24px; +} +.path { + display: grid; + grid-template-columns: 1fr; + border-left: 1px solid var(--border); + padding: 4px 0 4px 18px; + align-content: start; + gap: 8px; +} +.path b { + display: block; + font-weight: 600; + font-size: 15px; + margin-bottom: 4px; +} +.path span { + color: var(--muted-foreground); + font-size: 12.5px; + line-height: 1.5; +} +.path .note { + font: 500 11px / 1.4 var(--font-family-code); + color: var(--warning-text); +} +.path .note.mut { + color: var(--muted-foreground); +} +.path code { + font-size: 12px; + background: var(--surface-raised); + border: 1px solid var(--border); + border-radius: 6px; + padding: 2px 6px; +} + +/* Reading cards */ +.reads { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 16px; +} +.rc { + border-radius: 20px; + overflow: hidden; + background: var(--plain); + display: flex; + flex-direction: column; +} +.rc .cover { + background: var(--tint); + height: 200px; + display: grid; + place-items: center; + font-family: var(--font-family-code); + color: var(--accent-solid); + font-size: 26px; + font-weight: 500; + letter-spacing: -0.02em; + text-align: center; + padding: 0 20px; + line-height: 1.25; +} +.rc .cover small { + display: block; + font-size: 12px; + color: var(--muted-foreground); + letter-spacing: 0.08em; + text-transform: uppercase; + margin-top: 10px; + font-weight: 500; +} +.rc .body { + padding: 18px 20px 20px; +} +.rc h3 { + margin: 0 0 6px; + font-size: 17px; + font-weight: 600; + letter-spacing: -0.01em; + text-wrap: balance; +} +.rc .meta { + font-size: 12px; + color: var(--muted-foreground); +} +.rc .meta a { + color: var(--accent-solid); +} + +/* Downloads page */ +.doc { + padding: 56px 0 0; +} +.doc h1 { + font-size: 40px; + line-height: 1.15; + font-weight: 600; + letter-spacing: -0.03em; + margin: 0 0 12px; + text-wrap: balance; +} +.doc > p.lede { + margin: 0 0 8px; + text-align: left; +} +.doc h2 { + font-size: 24px; + margin: 48px 0 10px; +} +.doc p, +.doc li { + font-size: 15px; + line-height: 1.6; + color: var(--muted-foreground); + max-width: 72ch; +} +.doc p a:not(.btn), +.doc li a { + color: var(--accent-solid); + text-decoration: underline; + text-underline-offset: 3px; +} +.doc p b { + color: var(--foreground); + font-weight: 600; +} +.doc .note { + display: inline-block; + font: 500 11px / 1.4 var(--font-family-code); + color: var(--warning-text); + border: 1px solid color-mix(in srgb, var(--warning-text) 40%, transparent); + border-radius: 999px; + padding: 3px 10px; + margin-bottom: 10px; +} +.doc pre { + background: var(--plain); + border: 1px solid var(--border); + border-radius: var(--radius-container); + padding: 14px 16px; + overflow-x: auto; + font: 13px / 1.6 var(--font-family-code); + color: var(--foreground); + margin: 12px 0; +} +.doc code { + font-size: 0.92em; +} + +/* Footer */ +.foot { + margin-top: 72px; + border-top: 1px solid var(--border); + padding: 28px 0 32px; + font-size: 12.5px; + color: var(--muted-foreground); +} +.foot .top { + display: flex; + flex-wrap: wrap; + gap: 16px 24px; + align-items: center; + margin-bottom: 18px; +} +.foot .links { + display: flex; + flex-wrap: wrap; + gap: 4px 16px; + flex: 1; +} +.foot .links a { + color: var(--foreground); + font-weight: 500; +} +.foot p { + margin: 0; +} +.foot .disc { + max-width: 96ch; + line-height: 1.6; +} +.foot .tm { + margin-top: 12px; +} + +@media (max-width: 1000px) { + .scene { + height: auto; + padding: 28px 24px 48px; + } + .turn { + width: 100%; + grid-template-columns: repeat(4, 1fr); + } + .turn .rail, + .turn .hwline { + display: none; + } + .turn .ev-pill:nth-child(odd), + .turn .ev-pill:nth-child(even) { + transform: none; + } +} +@media (max-width: 900px) { + .nav .links { + display: none; + } + .sec-h { + grid-template-columns: 1fr; + gap: 12px; + } + .bento > .tile { + grid-column: span 12; + grid-row: auto; + } + .tile.get { + flex-direction: column; + gap: 20px; + } + .get-h { + flex-basis: auto; + } + .paths3 { + grid-template-columns: 1fr; + } + .reads { + grid-template-columns: 1fr 1fr; + } +} +@media (max-width: 720px) { + .wrap { + padding: 0 20px; + } + .hero { + padding-top: 40px; + } + .scene { + padding: 28px 20px 48px; + } + .turn { + grid-template-columns: 1fr 1fr; + } + .tape-cap { + left: 20px; + right: 20px; + flex-direction: column; + gap: 6px; + } + .tape-cap .hw { + margin-left: 0; + } + .reads { + grid-template-columns: 1fr; + } + h2 { + font-size: 28px; + } + .doc h1 { + font-size: 32px; + } +} +@media (prefers-reduced-motion: no-preference) { + .btn, + .nav .links a { + transition: background-color 120ms ease; + } +} diff --git a/website/test/site.test.mjs b/website/test/site.test.mjs new file mode 100644 index 0000000000..4afa8255b9 --- /dev/null +++ b/website/test/site.test.mjs @@ -0,0 +1,90 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * The parts of the built site that ASF policy and #4307 require, checked on + * the HTML that will be published rather than on the source that produced it. + */ +import assert from 'node:assert/strict'; +import { readFileSync } from 'node:fs'; +import test from 'node:test'; + +const dist = new URL('../dist/', import.meta.url); +const page = (path) => readFileSync(new URL(path, dist), 'utf8'); +const locales = ['en', 'zh-CN']; +const pages = ['index.html', 'downloads/index.html']; + +const positioning = + 'Apache Maka (Incubating) is a high-performance agent workspace that keeps a complete record of everything it did.'; +const disclaimer = + 'Apache Maka is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator.'; +const footer = [ + 'https://www.apache.org/', + 'https://www.apache.org/licenses/', + 'https://www.apache.org/events/current-event.html', + 'https://privacy.apache.org/policies/privacy-policy-public.html', + 'https://www.apache.org/security/', + 'https://www.apache.org/foundation/sponsorship.html', +]; + +const hrefs = (html) => new Set([...html.matchAll(/href="([^"]+)"/gu)].map(([, href]) => href)); + +// Links that legitimately differ by language: the localized twin of a +// document, and the site's own pages. Everything else must match. +const normalize = (href) => href.replace(/\.zh-CN\.md$/u, '.md').replace(/^\/zh-CN\//u, '/en/'); + +test('the root redirects to the English homepage', () => { + assert.match(page('index.html'), /url=\/en\//u); +}); + +test('every page identifies the podling and carries the Incubator disclaimer', () => { + for (const locale of locales) { + for (const path of pages) { + const html = page(`${locale}/${path}`); + assert.ok(html.includes('Apache Maka (Incubating)'), `${locale}/${path}`); + assert.ok(html.includes(disclaimer), `${locale}/${path}`); + for (const href of footer) assert.ok(hrefs(html).has(href), `${locale}/${path} ${href}`); + } + } +}); + +test('the English homepage uses the positioning sentence unchanged', () => { + assert.ok(page('en/index.html').includes(positioning)); +}); + +test('both languages link the same documents', () => { + for (const path of pages) { + const [en, zh] = locales.map((locale) => + [...hrefs(page(`${locale}/${path}`))].map(normalize).sort(), + ); + assert.deepEqual(zh, en, path); + } +}); + +test('the site does not load anything from a third party', () => { + for (const locale of locales) { + for (const path of pages) { + const html = page(`${locale}/${path}`); + const loaded = [...html.matchAll(/(?:src|href)="(https?:[^"]+)"[^>]*>/gu)] + .filter(([tag]) => /<(?:link[^>]*rel="(?:stylesheet|preload|icon)"|script|img)/u.test(tag)) + .map(([, url]) => url); + assert.deepEqual(loaded, [], `${locale}/${path}`); + } + } +}); diff --git a/website/tsconfig.json b/website/tsconfig.json new file mode 100644 index 0000000000..8bf91d3bb9 --- /dev/null +++ b/website/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"] +} From 19846611a8cd9cbc4fbc5c069474190e7f537ecd Mon Sep 17 00:00:00 2001 From: AstroHan Date: Thu, 3 Sep 2026 21:10:41 +0800 Subject: [PATCH 02/32] chore(deps): refresh third-party notices for zod 4.5.4 Adding the website workspace re-resolved zod from 4.4.3 to 4.5.4 in the production closure, and check:release refuses stale notices. Generated-by: Claude Code --- apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt | 2 +- packages/cli/THIRD_PARTY_NOTICES.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt b/apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt index e2183dfbac..f319246ea2 100644 --- a/apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt +++ b/apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt @@ -14493,7 +14493,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ================================================================================ -Package: zod@4.4.3 +Package: zod@4.5.4 Declared license: MIT Selected license: MIT Repository: git+https://github.com/colinhacks/zod.git diff --git a/packages/cli/THIRD_PARTY_NOTICES.txt b/packages/cli/THIRD_PARTY_NOTICES.txt index 7e16844036..1ddfbce6c9 100644 --- a/packages/cli/THIRD_PARTY_NOTICES.txt +++ b/packages/cli/THIRD_PARTY_NOTICES.txt @@ -7715,7 +7715,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ================================================================================ -Package: zod@4.4.3 +Package: zod@4.5.4 Declared license: MIT Selected license: MIT Repository: git+https://github.com/colinhacks/zod.git From d0f86e665ff4e978e5f6d54fab44310603e940da Mon Sep 17 00:00:00 2001 From: AstroHan Date: Thu, 3 Sep 2026 21:34:17 +0800 Subject: [PATCH 03/32] feat(website): add a remembered light/dark toggle Reviewers asked for a switch rather than following the OS alone. The choice is stored per browser and applied before first paint; without one the OS setting still decides. Generated-by: Claude Code --- website/README.md | 2 +- website/src/copy/en.ts | 1 + website/src/copy/types.ts | 1 + website/src/copy/zh-CN.ts | 1 + website/src/layouts/Site.astro | 37 +++++++++++++++++++++++++++++++++- website/src/styles/site.css | 32 ++++++++++++++++++++++++++++- 6 files changed, 71 insertions(+), 3 deletions(-) diff --git a/website/README.md b/website/README.md index 48f6436abf..ba0b849b0e 100644 --- a/website/README.md +++ b/website/README.md @@ -36,7 +36,7 @@ npm --workspace @maka/website run test:dist ## Design -Colour, radius and surface tokens are the desktop app's defaults, copied by value from `apps/desktop/src/renderer/maka-tokens.css` into `src/styles/site.css`. The site follows the viewer's colour scheme. Fonts are Geist and Geist Mono (SIL Open Font License 1.1), self-hosted from the `@fontsource-variable` packages the desktop app already depends on; nothing loads from a third party. The logo is `apps/desktop/assets/app-icons/sky.png`, the same file the README uses. +Colour, radius and surface tokens are the desktop app's defaults, copied by value from `apps/desktop/src/renderer/maka-tokens.css` into `src/styles/site.css`. The site follows the viewer's colour scheme until they pick one with the toggle in the top bar, which is remembered in that browser. Fonts are Geist and Geist Mono (SIL Open Font License 1.1), self-hosted from the `@fontsource-variable` packages the desktop app already depends on; nothing loads from a third party. The logo is `apps/desktop/assets/app-icons/sky.png`, the same file the README uses. ## Publishing diff --git a/website/src/copy/en.ts b/website/src/copy/en.ts index e7fd91ec07..e8e40b8f1b 100644 --- a/website/src/copy/en.ts +++ b/website/src/copy/en.ts @@ -30,6 +30,7 @@ export const en: Copy = { siteName: 'Apache Maka (Incubating)', positioning: 'Apache Maka (Incubating) is a high-performance agent workspace that keeps a complete record of everything it did.', + theme: { toDark: 'Switch to dark mode', toLight: 'Switch to light mode' }, nav: { docs: 'Docs', downloads: 'Downloads', diff --git a/website/src/copy/types.ts b/website/src/copy/types.ts index 9b2efd1710..d7c1a55513 100644 --- a/website/src/copy/types.ts +++ b/website/src/copy/types.ts @@ -26,6 +26,7 @@ export interface Copy { langLabel: string; siteName: string; positioning: string; + theme: { toDark: string; toLight: string }; nav: { docs: string; downloads: string; diff --git a/website/src/copy/zh-CN.ts b/website/src/copy/zh-CN.ts index 389f7d08e9..f91d56de11 100644 --- a/website/src/copy/zh-CN.ts +++ b/website/src/copy/zh-CN.ts @@ -25,6 +25,7 @@ export const zhCN: Copy = { langLabel: '中文', siteName: 'Apache Maka (Incubating)', positioning: 'Apache Maka (Incubating) 是一个高性能的 Agent 工作台,完整记录它做过的每一件事。', + theme: { toDark: '切换到深色模式', toLight: '切换到浅色模式' }, nav: { docs: '文档', downloads: '下载', diff --git a/website/src/layouts/Site.astro b/website/src/layouts/Site.astro index cb454ed699..a4eec28f54 100644 --- a/website/src/layouts/Site.astro +++ b/website/src/layouts/Site.astro @@ -51,6 +51,19 @@ const downloads = `/${copy.locale}/downloads/`; {locales.map((locale) => )} +
@@ -78,7 +91,11 @@ const downloads = `/${copy.locale}/downloads/`; ), )}
- {copy.nav.getMaka} + + {copy.nav.getMaka} @@ -108,5 +125,23 @@ const downloads = `/${copy.locale}/downloads/`;

{copy.footer.trademark}

+ diff --git a/website/src/styles/site.css b/website/src/styles/site.css index 7e968fd656..b6cb67bedf 100644 --- a/website/src/styles/site.css +++ b/website/src/styles/site.css @@ -19,7 +19,7 @@ /* Colour and radius tokens are the desktop app's defaults, copied by value from apps/desktop/src/renderer/maka-tokens.css and astryx-theme/maka.css. - The site follows the viewer's colour scheme; there is no toggle. */ + The scheme follows the OS until the viewer picks one with the toggle. */ :root { color-scheme: light dark; --background: light-dark(oklch(1 0 0), oklch(0.205 0.004 286)); @@ -55,6 +55,12 @@ "Geist Mono Variable", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace; } +:root[data-theme="light"] { + color-scheme: light; +} +:root[data-theme="dark"] { + color-scheme: dark; +} html { margin: 0; background: var(--page); @@ -148,6 +154,30 @@ code { background: var(--foreground); color: var(--page); } +.theme { + display: inline-grid; + place-items: center; + width: 34px; + height: 34px; + margin: 0 10px 0 6px; + padding: 0; + border: 1px solid var(--border); + border-radius: 999px; + background: transparent; + color: var(--muted-foreground); + cursor: pointer; +} +.theme:hover { + color: var(--foreground); + background: var(--surface-sunken); +} +.theme svg { + display: none; +} +:root[data-theme="dark"] .theme .sun, +:root:not([data-theme="dark"]) .theme .moon { + display: block; +} .btn { display: inline-flex; align-items: center; From 833a86345b1a1dc837b7be651aff23856cad52a5 Mon Sep 17 00:00:00 2001 From: AstroHan Date: Thu, 3 Sep 2026 21:34:50 +0800 Subject: [PATCH 04/32] fix(website): drop hover transitions that smear a theme switch Generated-by: Claude Code --- website/src/styles/site.css | 6 ------ 1 file changed, 6 deletions(-) diff --git a/website/src/styles/site.css b/website/src/styles/site.css index b6cb67bedf..1b462fee55 100644 --- a/website/src/styles/site.css +++ b/website/src/styles/site.css @@ -909,9 +909,3 @@ h2 { font-size: 32px; } } -@media (prefers-reduced-motion: no-preference) { - .btn, - .nav .links a { - transition: background-color 120ms ease; - } -} From 3d2960b1318a94fd34281560d85f8287f584fa12 Mon Sep 17 00:00:00 2001 From: AstroHan Date: Thu, 3 Sep 2026 23:10:55 +0800 Subject: [PATCH 05/32] fix(deps): lock zod to 4.4.3 to keep client capability protocol compatibility Revert unintended zod bump from 4.4.3 to 4.5.4 in root package-lock.json. Zod 4.5.4 generates 'additionalItems: false' for z.tuple() schemas, which violates the strict schema keyword allowlist in runtime-host client capability protocol validation and causes native capability tests to fail. --- apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt | 2 +- package-lock.json | 6 +++--- packages/cli/THIRD_PARTY_NOTICES.txt | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt b/apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt index f319246ea2..e2183dfbac 100644 --- a/apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt +++ b/apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt @@ -14493,7 +14493,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ================================================================================ -Package: zod@4.5.4 +Package: zod@4.4.3 Declared license: MIT Selected license: MIT Repository: git+https://github.com/colinhacks/zod.git diff --git a/package-lock.json b/package-lock.json index e95240fc3e..567219a683 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16521,9 +16521,9 @@ } }, "node_modules/zod": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.5.4.tgz", - "integrity": "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/packages/cli/THIRD_PARTY_NOTICES.txt b/packages/cli/THIRD_PARTY_NOTICES.txt index 1ddfbce6c9..7e16844036 100644 --- a/packages/cli/THIRD_PARTY_NOTICES.txt +++ b/packages/cli/THIRD_PARTY_NOTICES.txt @@ -7715,7 +7715,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ================================================================================ -Package: zod@4.5.4 +Package: zod@4.4.3 Declared license: MIT Selected license: MIT Repository: git+https://github.com/colinhacks/zod.git From 94b9af9f1e07a9aaea815f7df93926057bab8bd1 Mon Sep 17 00:00:00 2001 From: AstroHan Date: Thu, 3 Sep 2026 23:11:09 +0800 Subject: [PATCH 06/32] feat(website): polish downloads page with outline and copyable steps Add an on-page outline with scrollspy, status card block for distribution channels, and numbered verification and build steps with copy buttons. --- website/src/components/Downloads.astro | 144 ++++++++++++++++------ website/src/copy/en.ts | 36 +++++- website/src/copy/types.ts | 13 +- website/src/copy/zh-CN.ts | 30 ++++- website/src/styles/site.css | 159 +++++++++++++++++++++++-- 5 files changed, 328 insertions(+), 54 deletions(-) diff --git a/website/src/components/Downloads.astro b/website/src/components/Downloads.astro index 3c259534d2..869e4be87d 100644 --- a/website/src/components/Downloads.astro +++ b/website/src/components/Downloads.astro @@ -32,45 +32,121 @@ const l = copy.locale; // Archive naming follows scripts/asf-source-release.mjs; is the // release version, for example 0.1.0. const archive = 'apache-maka--incubating-src.tar.gz'; -const verify = [ - `curl -O ${links.dist}KEYS`, - 'gpg --import KEYS', - `curl -O ${links.dist}/${archive}`, - `curl -O ${links.dist}/${archive}.asc`, - `curl -O ${links.dist}/${archive}.sha512`, - `gpg --verify ${archive}.asc ${archive}`, - `shasum -a 512 -c ${archive}.sha512`, -].join('\n'); -const build = [ - 'git clone https://github.com/apache/maka.git', - 'cd maka', - 'npm ci', - 'npm run build', -].join('\n'); +const dist = `${links.dist}/`; +const steps = { + keys: [`curl -O ${links.dist}KEYS`, 'gpg --import KEYS'], + signature: [ + `curl -O ${dist}${archive}`, + `curl -O ${dist}${archive}.asc`, + `gpg --verify ${archive}.asc ${archive}`, + ], + checksum: [`curl -O ${dist}${archive}.sha512`, `shasum -a 512 -c ${archive}.sha512`], + clone: ['git clone https://github.com/apache/maka.git', 'cd maka'], + build: ['npm ci', 'npm run build'], +}; +const sections = [ + ['apache-releases', d.releases.h2], + ['verify', d.verify.h2], + ['nightly', d.nightly.h2], + ['source', d.source.h2], +] as const; --- -
-

{d.title}

-

{d.lede}

+
+
+

{d.title}

+

{d.lede}

-

{d.releases.h2}

- {d.releases.note} -

{d.releases.p}

-

{d.releases.distNote} {links.dist}

+ -

{d.verify.h2}

-

{d.verify.p}

-
{verify}
+
+

{d.releases.h2}

+ {d.releases.note} +

{d.releases.p}

+

{d.releases.distNote} {links.dist}

+
-

{d.nightly.h2}

- {d.nightly.note} -

{d.nightly.p} {d.nightly.windows}

-

{copy.hero.nightly}

+
-

{d.source.h2}

-

{d.source.requirements}

-
{build}
-

{d.source.after}

-
+
+

{d.verify.h2}

+

{d.verify.p}

+ {(['keys', 'signature', 'checksum'] as const).map((step) => ( + <> + {d.verify[step]} +
{steps[step].join('\n')}
+ + ))} +
+ +
+ +
+

{d.nightly.h2}

+ {d.nightly.note} +

{d.nightly.p} {d.nightly.windows}

+ {copy.hero.nightly} +
+ +
+ +
+

{d.source.h2}

+
    {d.source.prerequisites.map((item) =>
  • {item}
  • )}
+ {(['clone', 'build'] as const).map((step) => ( + <> + {d.source[step]} +
{steps[step].join('\n')}
+ + ))} +

{d.source.after}

+
+
+ + + + +
diff --git a/website/src/copy/en.ts b/website/src/copy/en.ts index e8e40b8f1b..c410f5cb5d 100644 --- a/website/src/copy/en.ts +++ b/website/src/copy/en.ts @@ -159,6 +159,27 @@ export const en: Copy = { downloads: { title: 'Downloads', lede: 'The signed source archive is the release. Everything else on this page is a convenience build, and says so.', + onThisPage: 'On this page', + copy: 'Copy', + copied: 'Copied', + status: { + h3: 'Where things stand', + release: { + label: 'Apache release', + value: 'None yet. The first one appears here after its vote.', + note: 'NOT YET', + }, + nightly: { + label: 'Desktop Nightly', + value: 'Daily from main, Apple Silicon Macs, Windows unsigned preview.', + note: 'NOT AN ASF RELEASE', + }, + source: { + label: 'Source', + value: 'apache/maka on GitHub, Apache License 2.0.', + note: 'APACHE-2.0', + }, + }, releases: { h2: 'Apache releases', note: 'NO APACHE RELEASE YET', @@ -167,7 +188,10 @@ export const en: Copy = { }, verify: { h2: 'Verify a release', - p: 'Every Apache release is verified the same way. Import the release managers’ keys, check the signature, then the checksum:', + p: 'Every Apache release is verified the same way, and every reviewer on the vote does this before voting.', + keys: 'Step 1: Import the release managers’ keys', + signature: 'Step 2: Check the signature', + checksum: 'Step 3: Check the checksum', }, nightly: { h2: 'Desktop Nightly', @@ -177,8 +201,14 @@ export const en: Copy = { }, source: { h2: 'Build from source', - requirements: - 'You need Node.js 22.19 or newer, npm 11, Git, and ripgrep, which the Grep tool shells out to.', + prerequisites: [ + 'Node.js 22.19 or newer', + 'npm 11', + 'Git', + 'ripgrep, which the Grep tool shells out to', + ], + clone: 'Step 1: Clone the repository', + build: 'Step 2: Install and build every workspace', after: 'CONTRIBUTING covers the workspace layout and how to start Desktop, the TUI and the CLI from that build.', }, diff --git a/website/src/copy/types.ts b/website/src/copy/types.ts index d7c1a55513..625c22ceba 100644 --- a/website/src/copy/types.ts +++ b/website/src/copy/types.ts @@ -89,9 +89,18 @@ export interface Copy { downloads: { title: string; lede: string; + onThisPage: string; + copy: string; + copied: string; + status: { + h3: string; + release: { label: string; value: string; note: string }; + nightly: { label: string; value: string; note: string }; + source: { label: string; value: string; note: string }; + }; releases: { h2: string; note: string; p: string; distNote: string }; - verify: { h2: string; p: string }; + verify: { h2: string; p: string; keys: string; signature: string; checksum: string }; nightly: { h2: string; note: string; p: string; windows: string }; - source: { h2: string; requirements: string; after: string }; + source: { h2: string; prerequisites: string[]; clone: string; build: string; after: string }; }; } diff --git a/website/src/copy/zh-CN.ts b/website/src/copy/zh-CN.ts index f91d56de11..774855b3f6 100644 --- a/website/src/copy/zh-CN.ts +++ b/website/src/copy/zh-CN.ts @@ -150,6 +150,27 @@ export const zhCN: Copy = { downloads: { title: '下载', lede: '签名的源码包才是 release。本页其它内容都是便利构建,并且都会写明。', + onThisPage: '本页目录', + copy: '复制', + copied: '已复制', + status: { + h3: '当前状态', + release: { + label: 'Apache release', + value: '尚无。第一个 release 投票通过后会出现在这里。', + note: '尚无', + }, + nightly: { + label: 'Desktop Nightly', + value: '每天从 main 构建,Apple Silicon Mac,Windows 未签名预览。', + note: '不是 ASF RELEASE', + }, + source: { + label: '源码', + value: 'GitHub 上的 apache/maka,Apache License 2.0。', + note: 'APACHE-2.0', + }, + }, releases: { h2: 'Apache releases', note: '尚无 APACHE RELEASE', @@ -158,7 +179,10 @@ export const zhCN: Copy = { }, verify: { h2: '验证 release', - p: '每个 Apache release 的验证方式都一样:导入 release manager 的公钥,验签,再核对校验和。', + p: '每个 Apache release 的验证方式都一样,投票的每位 reviewer 在投票前都会做这几步。', + keys: '第 1 步:导入 release manager 的公钥', + signature: '第 2 步:验签', + checksum: '第 3 步:核对校验和', }, nightly: { h2: 'Desktop Nightly', @@ -168,7 +192,9 @@ export const zhCN: Copy = { }, source: { h2: '从源码构建', - requirements: '需要 Node.js 22.19 或更新版本、npm 11、Git,以及 Grep 工具依赖的 ripgrep。', + prerequisites: ['Node.js 22.19 或更新版本', 'npm 11', 'Git', 'ripgrep,Grep 工具依赖它'], + clone: '第 1 步:克隆仓库', + build: '第 2 步:安装依赖并构建全部 workspace', after: 'CONTRIBUTING 说明了 workspace 布局,以及如何从这份构建启动 Desktop、TUI 和 CLI。', }, }, diff --git a/website/src/styles/site.css b/website/src/styles/site.css index 1b462fee55..19ebb4b351 100644 --- a/website/src/styles/site.css +++ b/website/src/styles/site.css @@ -737,32 +737,47 @@ h2 { color: var(--accent-solid); } -/* Downloads page */ +/* Downloads page: the Astryx technical-documentation layout, content plus a + sticky outline, rows for status and numbered steps with copyable code. */ .doc { + display: grid; + grid-template-columns: minmax(0, 1fr) 180px; + gap: 64px; padding: 56px 0 0; + max-width: 1040px; } .doc h1 { font-size: 40px; line-height: 1.15; font-weight: 600; letter-spacing: -0.03em; - margin: 0 0 12px; + margin: 0 0 10px; text-wrap: balance; } -.doc > p.lede { - margin: 0 0 8px; - text-align: left; +.doc .sup { + margin: 0; + font-size: 15px; + line-height: 1.6; + color: var(--muted-foreground); + max-width: 62ch; } .doc h2 { font-size: 24px; - margin: 48px 0 10px; + margin: 0 0 12px; +} +.doc h3 { + margin: 0; + font-size: 13px; + font-weight: 600; + letter-spacing: 0.02em; } .doc p, .doc li { font-size: 15px; line-height: 1.6; color: var(--muted-foreground); - max-width: 72ch; + max-width: 68ch; + margin: 0 0 12px; } .doc p a:not(.btn), .doc li a { @@ -770,9 +785,10 @@ h2 { text-decoration: underline; text-underline-offset: 3px; } -.doc p b { - color: var(--foreground); - font-weight: 600; +.doc .div { + border: 0; + border-top: 1px solid var(--border); + margin: 40px 0; } .doc .note { display: inline-block; @@ -781,21 +797,127 @@ h2 { border: 1px solid color-mix(in srgb, var(--warning-text) 40%, transparent); border-radius: 999px; padding: 3px 10px; - margin-bottom: 10px; + margin-bottom: 12px; +} +.doc .status { + margin: 32px 0 48px; + border: 1px solid var(--border); + border-radius: var(--radius-container); + background: var(--plain); + overflow: hidden; +} +.doc .status h3 { + padding: 12px 16px; + color: var(--muted-foreground); + border-bottom: 1px solid var(--border); +} +.doc .status .row { + display: grid; + grid-template-columns: 150px minmax(0, 1fr) auto; + gap: 16px; + align-items: center; + padding: 12px 16px; + border-bottom: 1px solid var(--border); + font-size: 14px; +} +.doc .status .row:last-child { + border-bottom: 0; +} +.doc .status .row:hover { + background: var(--surface-sunken); +} +.doc .status .row b { + font-weight: 600; +} +.doc .status .row span { + color: var(--muted-foreground); +} +.doc .status .row small { + font: 500 11px / 1 var(--font-family-code); + color: var(--muted-foreground); + white-space: nowrap; +} +.doc .status .row small.warn { + color: var(--warning-text); +} +.doc .step { + display: block; + font-size: 14px; + font-weight: 600; + margin: 18px 0 8px; +} +.doc ul { + padding-left: 20px; + margin: 0 0 8px; +} +.doc li { + margin: 0 0 4px; +} +.doc .code { + position: relative; + margin: 0 0 12px; } .doc pre { + margin: 0; background: var(--plain); border: 1px solid var(--border); border-radius: var(--radius-container); - padding: 14px 16px; + padding: 14px 96px 14px 16px; overflow-x: auto; font: 13px / 1.6 var(--font-family-code); color: var(--foreground); - margin: 12px 0; +} +.doc .copy { + position: absolute; + top: 8px; + right: 8px; + height: 28px; + padding: 0 10px; + border: 1px solid var(--border); + border-radius: 999px; + background: var(--surface-raised); + color: var(--muted-foreground); + font: 500 12px var(--font-family-body); + cursor: pointer; +} +.doc .copy:hover { + color: var(--foreground); } .doc code { font-size: 0.92em; } +.doc .btn { + margin-top: 4px; +} +.outline { + position: sticky; + top: 24px; + align-self: start; + padding-top: 132px; +} +.outline .lab { + font: 500 11px / 1 var(--font-family-code); + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--muted-foreground); + margin-bottom: 12px; +} +.outline a { + display: block; + padding: 6px 0 6px 12px; + border-left: 2px solid var(--border); + color: var(--muted-foreground); + font-size: 13px; + line-height: 1.4; +} +.outline a:hover { + color: var(--foreground); +} +.outline a[aria-current="true"] { + border-color: var(--accent-solid); + color: var(--foreground); + font-weight: 500; +} /* Footer */ .foot { @@ -905,7 +1027,18 @@ h2 { h2 { font-size: 28px; } + .doc { + grid-template-columns: minmax(0, 1fr); + gap: 0; + } + .outline { + display: none; + } .doc h1 { font-size: 32px; } + .doc .status .row { + grid-template-columns: 1fr; + gap: 4px; + } } From cc70e1d6bba7a8b39378f0fd9a0329d28f162824 Mon Sep 17 00:00:00 2001 From: AstroHan Date: Thu, 3 Sep 2026 23:16:48 +0800 Subject: [PATCH 07/32] fix(website): keep the nav inside a 390px viewport MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The brand, language switch, theme toggle and Get Maka button overflowed a 390px viewport by 4px, and the 中文 label wrapped onto two lines. Hero and downloads page carry the same call to action, so the button is dropped from the nav at phone widths, and the switch no longer wraps. Generated-by: Claude Code --- website/src/styles/site.css | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/website/src/styles/site.css b/website/src/styles/site.css index 19ebb4b351..6a13f301d4 100644 --- a/website/src/styles/site.css +++ b/website/src/styles/site.css @@ -97,6 +97,9 @@ code { align-items: center; gap: 4px; } +.nav > * { + flex-shrink: 0; +} .nav .brand { display: flex; align-items: center; @@ -144,6 +147,7 @@ code { overflow: hidden; font-size: 12px; font-weight: 500; + white-space: nowrap; } .lang a, .lang span { @@ -1003,6 +1007,13 @@ h2 { .wrap { padding: 0 20px; } + .nav .btn { + display: none; + } + .nav .brand, + .nav .theme { + margin-right: 0; + } .hero { padding-top: 40px; } From d5a0f72e3143ed20886c8a94ad7b4f3bdb664381 Mon Sep 17 00:00:00 2001 From: AstroHan Date: Thu, 3 Sep 2026 23:24:25 +0800 Subject: [PATCH 08/32] fix(website): point the brand at the language homepage on every page The brand reused the language-switch path builder, so on /downloads/ it linked back to the same page and clicking it did nothing. The site test now asserts the brand href on every built page. Generated-by: Claude Code --- website/src/layouts/Site.astro | 29 +++++++++-------------------- website/test/site.test.mjs | 9 +++++++++ 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/website/src/layouts/Site.astro b/website/src/layouts/Site.astro index a4eec28f54..ea8e6a8d51 100644 --- a/website/src/layouts/Site.astro +++ b/website/src/layouts/Site.astro @@ -37,7 +37,7 @@ const locales: Locale[] = ['en', 'zh-CN']; const path = page === 'home' ? '' : `${page}/`; const href = (locale: Locale) => `/${locale}/${path}`; const canonical = new URL(href(copy.locale), Astro.site); -const home = href(copy.locale); +const home = `/${copy.locale}/`; const downloads = `/${copy.locale}/downloads/`; --- @@ -101,25 +101,14 @@ const downloads = `/${copy.locale}/downloads/`;
-
- -
- {locales.map((locale) => - locale === copy.locale ? ( - {locale === 'en' ? 'EN' : '中文'} - ) : ( - {locale === 'en' ? 'EN' : '中文'} - ), - )} -
+

{copy.footer.disclaimer}

{copy.footer.trademark}

diff --git a/website/test/site.test.mjs b/website/test/site.test.mjs index 4afa8255b9..429d17e0db 100644 --- a/website/test/site.test.mjs +++ b/website/test/site.test.mjs @@ -64,6 +64,15 @@ test('every page identifies the podling and carries the Incubator disclaimer', ( } }); +test('the brand links to the homepage of the current language on every page', () => { + for (const locale of locales) { + for (const path of pages) { + const [, home] = page(`${locale}/${path}`).match(/ { assert.ok(page('en/index.html').includes(positioning)); }); From 7abc2ddb5d2adacbfdfb4b87fd345604b5890abc Mon Sep 17 00:00:00 2001 From: AstroHan Date: Thu, 3 Sep 2026 23:24:25 +0800 Subject: [PATCH 09/32] refactor(website): drop the footer language switch The top bar already switches language on every page and both switches did the same thing. Generated-by: Claude Code --- website/src/styles/site.css | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/website/src/styles/site.css b/website/src/styles/site.css index 6a13f301d4..2508afd00d 100644 --- a/website/src/styles/site.css +++ b/website/src/styles/site.css @@ -931,18 +931,11 @@ h2 { font-size: 12.5px; color: var(--muted-foreground); } -.foot .top { - display: flex; - flex-wrap: wrap; - gap: 16px 24px; - align-items: center; - margin-bottom: 18px; -} .foot .links { display: flex; flex-wrap: wrap; gap: 4px 16px; - flex: 1; + margin-bottom: 18px; } .foot .links a { color: var(--foreground); From 242b9065a0f593ceea4d47fe97396e103a315f29 Mon Sep 17 00:00:00 2001 From: AstroHan Date: Thu, 3 Sep 2026 23:36:14 +0800 Subject: [PATCH 10/32] feat(website): put the ASF links in a nav menu and add Incubator and Code of Conduct The nav's ASF item linked straight to apache.org while the policy links lived only in the footer. Both now render one list: Foundation, Incubator, License, Events, Privacy, Security, Sponsorship, Thanks and Code of Conduct, and the site test asserts every required URL on every page. Generated-by: Claude Code --- website/src/copy/en.ts | 2 ++ website/src/copy/links.ts | 1 + website/src/copy/types.ts | 2 ++ website/src/copy/zh-CN.ts | 2 ++ website/src/layouts/Site.astro | 34 +++++++++++++++++++++++---------- website/src/styles/site.css | 35 ++++++++++++++++++++++++++++++++++ website/test/site.test.mjs | 4 ++++ 7 files changed, 70 insertions(+), 10 deletions(-) diff --git a/website/src/copy/en.ts b/website/src/copy/en.ts index c410f5cb5d..2e74f7c57b 100644 --- a/website/src/copy/en.ts +++ b/website/src/copy/en.ts @@ -146,6 +146,8 @@ export const en: Copy = { }, footer: { foundation: 'Foundation', + incubator: 'Incubator', + conduct: 'Code of Conduct', license: 'License', events: 'Events', privacy: 'Privacy', diff --git a/website/src/copy/links.ts b/website/src/copy/links.ts index 1ddbc61415..529718e62d 100644 --- a/website/src/copy/links.ts +++ b/website/src/copy/links.ts @@ -35,6 +35,7 @@ export const links = { windows: `${main}/docs/windows-support.md`, asf: 'https://www.apache.org/', incubator: 'https://incubator.apache.org/', + conduct: 'https://www.apache.org/foundation/policies/conduct.html', license: 'https://www.apache.org/licenses/', events: 'https://www.apache.org/events/current-event.html', privacy: 'https://privacy.apache.org/policies/privacy-policy-public.html', diff --git a/website/src/copy/types.ts b/website/src/copy/types.ts index 625c22ceba..b4c887b134 100644 --- a/website/src/copy/types.ts +++ b/website/src/copy/types.ts @@ -77,6 +77,8 @@ export interface Copy { }; footer: { foundation: string; + incubator: string; + conduct: string; license: string; events: string; privacy: string; diff --git a/website/src/copy/zh-CN.ts b/website/src/copy/zh-CN.ts index 774855b3f6..c6aeda27cc 100644 --- a/website/src/copy/zh-CN.ts +++ b/website/src/copy/zh-CN.ts @@ -137,6 +137,8 @@ export const zhCN: Copy = { }, footer: { foundation: '基金会', + incubator: '孵化器', + conduct: '行为准则', license: '许可证', events: '活动', privacy: '隐私', diff --git a/website/src/layouts/Site.astro b/website/src/layouts/Site.astro index ea8e6a8d51..323da17322 100644 --- a/website/src/layouts/Site.astro +++ b/website/src/layouts/Site.astro @@ -39,6 +39,18 @@ const href = (locale: Locale) => `/${locale}/${path}`; const canonical = new URL(href(copy.locale), Astro.site); const home = `/${copy.locale}/`; const downloads = `/${copy.locale}/downloads/`; +// The ASF links every project site must carry, shown in the nav menu and the footer. +const asf = [ + [links.asf, copy.footer.foundation], + [links.incubator, copy.footer.incubator], + [links.license, copy.footer.license], + [links.events, copy.footer.events], + [links.privacy, copy.footer.privacy], + [links.asfSecurity, copy.footer.security], + [links.sponsorship, copy.footer.sponsorship], + [links.thanks, copy.footer.thanks], + [links.conduct, copy.footer.conduct], +]; --- @@ -79,7 +91,10 @@ const downloads = `/${copy.locale}/downloads/`; {copy.nav.benchmarks} {copy.nav.community} {copy.nav.security} - {copy.nav.asf} +
+ {copy.nav.asf} + +
@@ -101,20 +116,19 @@ const downloads = `/${copy.locale}/downloads/`;
diff --git a/website/src/styles/site.css b/website/src/styles/site.css index 4547534053..14a8e5d04f 100644 --- a/website/src/styles/site.css +++ b/website/src/styles/site.css @@ -664,11 +664,39 @@ h2 { color: var(--success-text); } .evs .cur { - width: 8px; + width: 2px; height: 22px; - border-radius: 2px; background: var(--accent-solid); } +/* Events are appended one by one, then the caret keeps blinking: the log is still being written. */ +@media (prefers-reduced-motion: no-preference) { + .evs.armed .e, + .evs.armed .cur { + opacity: 0; + transform: translateY(4px); + } + .evs.play .e { + animation: append 0.3s ease-out forwards; + animation-delay: calc(var(--i) * 0.28s); + } + .evs.play .cur { + animation: + append 0.2s ease-out forwards, + blink 1s steps(1) infinite; + animation-delay: calc(var(--i) * 0.28s); + } +} +@keyframes append { + to { + opacity: 1; + transform: none; + } +} +@keyframes blink { + 50% { + opacity: 0; + } +} /* Get Maka: three paths */ .tile.get { From 213cf2ae79592c36ad28052df0320216bd3c20da Mon Sep 17 00:00:00 2001 From: AstroHan Date: Thu, 3 Sep 2026 23:51:40 +0800 Subject: [PATCH 16/32] feat(website): polish the copy and drop the hero eyebrow The Chinese copy read like a sentence-by-sentence translation; it is rewritten in natural developer-facing Chinese, with the positioning sentence fixed to the wording agreed in #4307 and technical terms left in English. English edits: the lede loses a comma splice, the leaderboard caption and downloads status heading read plainly, and one tense is fixed. The eyebrow above the headline repeated the nav brand and is removed, and the Chinese headline gets an em-based measure so it breaks in two lines like the English. Generated-by: Claude Code --- website/src/components/Home.astro | 1 - website/src/copy/en.ts | 9 ++- website/src/copy/types.ts | 1 - website/src/copy/zh-CN.ts | 96 +++++++++++++++---------------- website/src/styles/site.css | 21 ++----- 5 files changed, 57 insertions(+), 71 deletions(-) diff --git a/website/src/components/Home.astro b/website/src/components/Home.astro index 1a05b900ff..614cff42e1 100644 --- a/website/src/components/Home.astro +++ b/website/src/components/Home.astro @@ -53,7 +53,6 @@ const reads = [
-
{copy.hero.eyebrow}

{copy.hero.headline[0]}{copy.hero.headline[1]}{copy.hero.headline[2]}

{copy.hero.lede}

diff --git a/website/src/copy/en.ts b/website/src/copy/en.ts index 2e74f7c57b..cf02b1f835 100644 --- a/website/src/copy/en.ts +++ b/website/src/copy/en.ts @@ -41,13 +41,12 @@ export const en: Copy = { getMaka: 'Get Maka', }, hero: { - eyebrow: 'Apache Maka (Incubating)', headline: [ 'A high-performance agent workspace that ', 'keeps a complete record', ' of everything it did.', ], - lede: 'An agent harness exists to finish tasks. We hold it to one measure, how many it completes and what that costs, and we publish every run: same model, same official verifier, full per-task record.', + lede: 'An agent harness exists to finish tasks. We hold it to one measure: how many it completes and at what cost. We publish every run: same model, same official verifier, full per-task record.', nightly: 'Try Desktop Nightly', source: 'Build from source', fine: 'Nightly is a developer build, not an ASF release', @@ -75,7 +74,7 @@ export const en: Copy = { h3: 'Nine harnesses, one model, the official verifier', p: 'Terminal-Bench 2.1 on DeepSeek V4 Flash, every task, scored by the official verifier. The ranking is descriptive; the per-task CSV ships with the report.', more: 'Read the report', - caption: 'pass@1 · reasoning max · cost/pass Maka $0.026', + caption: 'pass@1 · reasoning max · Maka cost per pass $0.026', }, paired: { h3: 'Head to head, same suite', @@ -165,7 +164,7 @@ export const en: Copy = { copy: 'Copy', copied: 'Copied', status: { - h3: 'Where things stand', + h3: 'Current status', release: { label: 'Apache release', value: 'None yet. The first one appears here after its vote.', @@ -185,7 +184,7 @@ export const en: Copy = { releases: { h2: 'Apache releases', note: 'NO APACHE RELEASE YET', - p: 'Apache Maka (Incubating) has not made an Apache release. When the first one passes its vote, this section lists it: the source archive, its SHA-512 checksum and detached GPG signature from the ASF distribution directory, and the KEYS file the signature verifies against.', + p: 'Apache Maka (Incubating) has not made an Apache release. When the first one passes its vote, this section will list it: the source archive, its SHA-512 checksum and detached GPG signature from the ASF distribution directory, and the KEYS file the signature verifies against.', distNote: 'Until then the distribution directory does not exist:', }, verify: { diff --git a/website/src/copy/types.ts b/website/src/copy/types.ts index b4c887b134..111a63dcb4 100644 --- a/website/src/copy/types.ts +++ b/website/src/copy/types.ts @@ -37,7 +37,6 @@ export interface Copy { getMaka: string; }; hero: { - eyebrow: string; headline: [string, string, string]; lede: string; nightly: string; diff --git a/website/src/copy/zh-CN.ts b/website/src/copy/zh-CN.ts index 9a4adef30d..5f52f44fdf 100644 --- a/website/src/copy/zh-CN.ts +++ b/website/src/copy/zh-CN.ts @@ -24,92 +24,91 @@ export const zhCN: Copy = { locale: 'zh-CN', langLabel: '中文', siteName: 'Apache Maka (Incubating)', - positioning: 'Apache Maka (Incubating) 是一个高性能的 Agent 工作台,完整记录它做过的每一件事。', + positioning: 'Apache Maka(孵化中)是一个高性能的 Agent 工作台,并完整记录它做过的每一件事。', theme: { toDark: '切换到深色模式', toLight: '切换到浅色模式' }, nav: { docs: '文档', downloads: '下载', - benchmarks: '跑分', + benchmarks: '评测', community: '社区', security: '安全', asf: 'ASF', getMaka: '获取 Maka', }, hero: { - eyebrow: 'Apache Maka (Incubating)', - headline: ['一个高性能的 Agent 工作台,', '完整记录', '它做过的每一件事。'], - lede: 'Agent harness 的存在是为了把任务做完。我们只用一把尺子衡量它:完成了多少,花了多少;并公开每一次运行:同一个模型,同一个官方验证器,逐任务的完整记录。', - nightly: '试用 Desktop Nightly', + headline: ['一个高性能的 Agent 工作台,', '并完整记录', '它做过的每一件事。'], + lede: 'Agent harness 的本职就是把任务做完。衡量它的标准只有一条:完成了多少,花了多少。我们公开每一次运行:同一个模型,同一个官方验证器,逐任务的完整记录。', + nightly: '体验 Desktop Nightly', source: '从源码构建', fine: 'Nightly 是开发者构建,不是 ASF release', architecture: '阅读架构文档', }, scene: { events: [ - { tone: 'mut', name: 'Text', detail: '「我重跑一下失败的测试。」' }, + { tone: 'mut', name: 'Text', detail: '「我重新跑一下失败的测试。」' }, { tone: '', name: 'FunctionCall', detail: 'Bash · npm test' }, - { tone: 'warn', name: 'permissionRequest', detail: '越出沙箱' }, + { tone: 'warn', name: 'permissionRequest', detail: '超出沙箱' }, { tone: 'ok', name: 'permissionDecision', detail: '你已批准' }, - { tone: '', name: 'FunctionResponse', detail: 'exit 1 · 已裁剪,仍保留' }, + { tone: '', name: 'FunctionResponse', detail: 'exit 1 · 裁剪展示,全量保留' }, { tone: 'dim', name: 'FunctionCall', detail: 'Edit · resume.ts' }, { tone: 'dim ok', name: 'endInvocation', detail: '运行完成' }, ], highWater: 'highWater', - caption: '一轮对话 · 七个 RuntimeEvent · 只追加', + caption: '一轮交互 · 7 个 RuntimeEvent · 只追加写入', formula: 'State(t) = Project(Log[0…t])', }, measured: { - h2: '只讲测出来的,只信记下来的。', - p: '这个站点今天能证明两件事:在同一个模型上,Maka 相对其它 harness 站在哪里;以及 runtime 工作时到底写下了什么。', + h2: '只认实测数据,只信落盘记录。', + p: '这个站点今天能证明两件事:在同一个模型上,Maka 比其他 harness 究竟表现如何;以及 Runtime 工作时到底记下了什么。', }, leaderboard: { - h3: '九个 harness,一个模型,官方验证器', - p: '在 DeepSeek V4 Flash 上跑完 Terminal-Bench 2.1 的全部任务,由官方验证器判分。排名是描述性的,逐任务 CSV 随报告一起公开。', - more: '阅读报告', - caption: 'pass@1 · reasoning max · Maka 每次通过成本 $0.026', + h3: '9 个 harness,同一个模型,官方验证器', + p: '在 DeepSeek V4 Flash 上跑完 Terminal-Bench 2.1 全部任务,由官方验证器统一判分。排名只描述结果,逐任务 CSV 随报告一并公开。', + more: '查看评测报告', + caption: 'pass@1 · reasoning max · Maka 单次通过成本 $0.026', }, paired: { - h3: '同一套题,正面对比', - p: '与 OpenCode 在同一批任务上做配对单次运行。差距在这套题上经得起精确 McNemar 检验,每个通过任务的成本持平。', - more: '阅读配对报告', + h3: '同一套任务,正面对比', + p: '与 OpenCode 在同一批任务上做配对单次运行。差距经得起精确 McNemar 检验,每个通过任务的成本持平。', + more: '查看对比报告', stat: '+13.5', statSmall: 'pp · 68.5% 对 55.1%', }, host: { - h3: '唯一的 Runtime Host', - p: 'Desktop、TUI、CLI 和 Eval 都是同一个执行权威的瘦客户端。', - more: 'Host 如何工作', + h3: '只有一个 Runtime Host', + p: 'Desktop、TUI、CLI 和 Eval 都是瘦客户端,执行统一交给同一个 Runtime Host。', + more: '了解 Host 如何工作', clients: ['Desktop', 'TUI / CLI', 'Eval'], core: 'Runtime Host', - coreSmall: '掌管执行', + coreSmall: '掌控执行', }, log: { - h3: '日志就是运行时', - p: '每条消息、每次工具调用、每个权限决定和每次终止,都是一条只追加的 RuntimeEvent。界面、下一个 prompt 和崩溃恢复都是这份日志的投影,从来不是唯一副本。', + h3: '日志即运行时', + p: '每条消息、每次工具调用、每个权限决定和每次终止,都是一条只追加的 RuntimeEvent。界面、下一轮 prompt 和崩溃恢复都从这份日志推导出来,日志之外没有第二份权威副本。', more: 'Log Is the Runtime', }, get: { h3: '获取 Maka', - p: '三条路径,刻意分开。', + p: '三条路径,边界分明。', nightly: { - title: '试用 Desktop Nightly', - body: '每天从 main 构建,面向开发者和测试者,发布在 GitHub Releases。目前支持 Apple Silicon Mac;Windows 是未签名预览。', + title: '体验 Desktop Nightly', + body: '每天基于 main 构建,面向开发者和测试者,发布在 GitHub Releases。目前支持 Apple Silicon Mac;Windows 是未签名预览。', note: '不是 ASF RELEASE · 可能不稳定', }, source: { title: '从源码构建', - body: '克隆 apache/maka,然后 npm ci 和 npm run build。Desktop、TUI 和 CLI 共用一个 Runtime Host。', + body: '克隆 apache/maka,然后 npm ci 和 npm run build。Desktop、TUI 和 CLI 共用同一个 Runtime Host。', note: 'APACHE-2.0', }, releases: { title: 'Apache Releases', - body: 'Maka 还没有发布过 Apache release。发布之后,签名的源码包才是 release,安装包只是便利产物。', + body: 'Maka 尚未发布过 Apache release。发布之后,带签名的源码包才是正式 release,安装包只是便利构建。', note: 'KEYS · SHA-512 · .asc', }, }, reads: { h2: '报告与文章', - p: '首页的每一条主张都链接到一份拥有这些数字的报告或文档。', + p: '首页的每一条结论和数字,都能追溯到对应的完整报告或文档。', blogLog: { cover: 'State(t) =\nProject(Log[0…t])', small: 'docs/blogs', @@ -125,14 +124,14 @@ export const zhCN: Copy = { nineArm: { cover: '69 / 89', small: 'docs/eval · nine-arm', - h3: 'Terminal-Bench 2.1,九个 harness', - meta: '报告与逐任务 CSV', + h3: 'Terminal-Bench 2.1:9 个 harness', + meta: '评测报告与逐任务 CSV', }, paired: { cover: 'p = 0.0118', small: 'docs/eval · paired', - h3: 'Maka 对 OpenCode', - meta: '报告与逐任务 CSV', + h3: 'Maka 对比 OpenCode', + meta: '对比报告与逐任务 CSV', }, }, footer: { @@ -150,7 +149,7 @@ export const zhCN: Copy = { }, downloads: { title: '下载', - lede: '签名的源码包才是 release。本页其它内容都是便利构建,并且都会写明。', + lede: '带签名的源码包才是正式 release。本页其余内容都是便利构建,并且都明确标注。', onThisPage: '本页目录', copy: '复制', copied: '已复制', @@ -158,12 +157,12 @@ export const zhCN: Copy = { h3: '当前状态', release: { label: 'Apache release', - value: '尚无。第一个 release 投票通过后会出现在这里。', - note: '尚无', + value: '暂未发布。首个 release 投票通过后会列在这里。', + note: '暂无', }, nightly: { label: 'Desktop Nightly', - value: '每天从 main 构建,Apple Silicon Mac,Windows 未签名预览。', + value: '每天基于 main 构建,支持 Apple Silicon Mac,Windows 为未签名预览。', note: '不是 ASF RELEASE', }, source: { @@ -174,29 +173,30 @@ export const zhCN: Copy = { }, releases: { h2: 'Apache releases', - note: '尚无 APACHE RELEASE', - p: 'Apache Maka (Incubating) 还没有发布过 Apache release。第一个 release 投票通过后,这里会列出它:源码包、ASF 分发目录里的 SHA-512 校验和与分离的 GPG 签名,以及签名所对应的 KEYS 文件。', - distNote: '在此之前,分发目录尚不存在:', + note: '暂无 APACHE RELEASE', + p: 'Apache Maka (Incubating) 尚未发布过 Apache release。首个 release 投票通过后会列在这里:源码包、ASF 分发目录中的 SHA-512 校验和与独立的 GPG 签名,以及签名对应的 KEYS 文件。', + distNote: '在此之前,分发目录尚未创建:', }, verify: { h2: '验证 release', - p: '每个 Apache release 的验证方式都一样,投票的每位 reviewer 在投票前都会做这几步。', + p: '所有 Apache release 的验证方式都一样,参与投票的每位 reviewer 在表决前都会走一遍这几步。', keys: '第 1 步:导入 release manager 的公钥', - signature: '第 2 步:验签', + signature: '第 2 步:校验签名', checksum: '第 3 步:核对校验和', }, nightly: { h2: 'Desktop Nightly', note: '不是 ASF RELEASE', - p: 'Desktop Nightly 每天从 main 构建,面向开发者和测试者,以 GitHub prerelease 的形式发布。选择最新的 Maka Desktop Nightly;安装后应用会在 Nightly 渠道自动更新。它不是 ASF release,也不适合生产使用。目前面向 Apple Silicon Mac。', - windows: 'Windows 是未签名预览,不是受支持的发布层级。', + p: 'Desktop Nightly 每天基于 main 构建,面向开发者和测试者,以 GitHub prerelease 形式发布。选择最新的 Maka Desktop Nightly;安装后应用会在 Nightly 渠道自动更新。它不是 ASF release,不适合生产环境。目前仅支持 Apple Silicon Mac。', + windows: 'Windows 是未签名预览,不属于受支持的发布层级。', }, source: { h2: '从源码构建', - prerequisites: ['Node.js 22.19 或更新版本', 'npm 11', 'Git', 'ripgrep,Grep 工具依赖它'], + prerequisites: ['Node.js 22.19 或更高版本', 'npm 11', 'Git', 'ripgrep,供 Grep 工具调用'], clone: '第 1 步:克隆仓库', build: '第 2 步:安装依赖并构建全部 workspace', - after: 'CONTRIBUTING 说明了 workspace 布局,以及如何从这份构建启动 Desktop、TUI 和 CLI。', + after: + 'CONTRIBUTING 介绍了 workspace 的目录结构,以及如何从这份构建启动 Desktop、TUI 和 CLI。', }, }, }; diff --git a/website/src/styles/site.css b/website/src/styles/site.css index 14a8e5d04f..70eea66c24 100644 --- a/website/src/styles/site.css +++ b/website/src/styles/site.css @@ -251,28 +251,17 @@ code { padding: 64px 0 24px; text-align: center; } -.eyebrow { - display: inline-flex; - align-items: center; - gap: 8px; - font: 500 12px / 1 var(--font-family-code); - letter-spacing: 0.08em; - text-transform: uppercase; - color: var(--muted-foreground); -} -.eyebrow i { - width: 8px; - height: 8px; - border-radius: 50%; - background: var(--accent-solid); -} h1.display { font-size: clamp(32px, 5vw, 52px); line-height: 1.12; font-weight: 500; letter-spacing: -0.03em; - margin: 18px auto 14px; + margin: 0 auto 14px; max-width: 18ch; +} +/* CJK glyphs are a full em wide, so the Chinese headline needs its own measure to break in two lines. */ +h1.display:lang(zh-CN) { + max-width: 15em; text-wrap: balance; } h1.display b { From 3669cb0604239f5b13d4a73e7846a068cc768a6d Mon Sep 17 00:00:00 2001 From: AstroHan Date: Thu, 3 Sep 2026 23:56:56 +0800 Subject: [PATCH 17/32] fix(website): stretch the leaderboard rows to fill the tall tile The tile's height comes from the two tiles beside it and the table was pushed to the bottom, so shorter copy, as in Chinese, left a hole between the link and the table. The rows now share the leftover height. Generated-by: Claude Code --- website/src/styles/site.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/website/src/styles/site.css b/website/src/styles/site.css index 70eea66c24..ace3f5ff89 100644 --- a/website/src/styles/site.css +++ b/website/src/styles/site.css @@ -513,6 +513,14 @@ h2 { } /* Leaderboard as rows */ +/* The tile's height comes from the two tiles beside it, so the table stretches its rows to fill + whatever the copy above it leaves over. */ +.tile.r2 .fig, +.lb { + flex: 1; + display: flex; + flex-direction: column; +} .lb { background: var(--surface-raised); border-radius: var(--radius-container); @@ -520,6 +528,7 @@ h2 { border: 1px solid var(--border); } .lb .row { + flex: 1; display: grid; grid-template-columns: 22px 96px 1fr 58px; gap: 10px; From 38979b5005d196c4aecd891785aaec58c8e2dce1 Mon Sep 17 00:00:00 2001 From: AstroHan Date: Fri, 4 Sep 2026 00:18:02 +0800 Subject: [PATCH 18/32] refactor(website): drop the coloured dots from the hero event cards The event type is already coloured by tone, so the dot said the same thing twice. Generated-by: Claude Code --- website/src/components/Home.astro | 2 +- website/src/styles/site.css | 16 ---------------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/website/src/components/Home.astro b/website/src/components/Home.astro index 614cff42e1..8350b4bd8c 100644 --- a/website/src/components/Home.astro +++ b/website/src/components/Home.astro @@ -66,7 +66,7 @@ const reads = [
{copy.scene.highWater}
{copy.scene.events.map((event) => ( -
{event.name}{event.detail}
+
{event.name}{event.detail}
))}
{copy.scene.caption}{copy.scene.formula}
diff --git a/website/src/styles/site.css b/website/src/styles/site.css index ace3f5ff89..8c049084a5 100644 --- a/website/src/styles/site.css +++ b/website/src/styles/site.css @@ -353,13 +353,6 @@ h1.display b { min-width: 0; text-align: left; } -.ev-pill i { - width: 10px; - height: 10px; - border-radius: 50%; - background: var(--accent-solid); - margin-bottom: 4px; -} .ev-pill b { font: 500 11px / 1.3 var(--font-family-code); color: var(--accent-solid); @@ -374,21 +367,12 @@ h1.display b { overflow: hidden; text-overflow: ellipsis; } -.ev-pill.mut i { - background: var(--muted-foreground); -} .ev-pill.mut b { color: var(--foreground); } -.ev-pill.warn i { - background: var(--warning-text); -} .ev-pill.warn b { color: var(--warning-text); } -.ev-pill.ok i { - background: var(--success-text); -} .ev-pill.ok b { color: var(--success-text); } From 3853dbd67fcdf0b3a0533f46a14b53d4f8c5c3f9 Mon Sep 17 00:00:00 2001 From: AstroHan Date: Fri, 4 Sep 2026 00:24:36 +0800 Subject: [PATCH 19/32] feat(website): name the hero's events in plain words RuntimeEvent type names on the first screen mean nothing to a first-time visitor, a point raised in review on #4660. The hero cards now say what happened (Model says, Runs a command, You approve) and the high-water line reads as what the model still sees; the type names stay in the log tile, where the term is explained. Generated-by: Claude Code --- website/src/components/Home.astro | 2 +- website/src/copy/en.ts | 31 +++++++++++++++++++++++-------- website/src/copy/types.ts | 3 +++ website/src/copy/zh-CN.ts | 21 +++++++++++++-------- 4 files changed, 40 insertions(+), 17 deletions(-) diff --git a/website/src/components/Home.astro b/website/src/components/Home.astro index 8350b4bd8c..ddb20e1114 100644 --- a/website/src/components/Home.astro +++ b/website/src/components/Home.astro @@ -66,7 +66,7 @@ const reads = [
{copy.scene.highWater}
{copy.scene.events.map((event) => ( -
{event.name}{event.detail}
+
{event.label}{event.detail}
))}
{copy.scene.caption}{copy.scene.formula}
diff --git a/website/src/copy/en.ts b/website/src/copy/en.ts index cf02b1f835..f817b76e82 100644 --- a/website/src/copy/en.ts +++ b/website/src/copy/en.ts @@ -54,15 +54,30 @@ export const en: Copy = { }, scene: { events: [ - { tone: 'mut', name: 'Text', detail: '"I\'ll rerun the failing test."' }, - { tone: '', name: 'FunctionCall', detail: 'Bash · npm test' }, - { tone: 'warn', name: 'permissionRequest', detail: 'leaves the sandbox' }, - { tone: 'ok', name: 'permissionDecision', detail: 'approved by you' }, - { tone: '', name: 'FunctionResponse', detail: 'exit 1 · pruned, kept' }, - { tone: 'dim', name: 'FunctionCall', detail: 'Edit · resume.ts' }, - { tone: 'dim ok', name: 'endInvocation', detail: 'Run completed' }, + { tone: 'mut', name: 'Text', label: 'Model says', detail: '"I\'ll rerun the failing test."' }, + { tone: '', name: 'FunctionCall', label: 'Runs a command', detail: 'Bash · npm test' }, + { + tone: 'warn', + name: 'permissionRequest', + label: 'Asks permission', + detail: 'leaves the sandbox', + }, + { + tone: 'ok', + name: 'permissionDecision', + label: 'You approve', + detail: 'written to the log', + }, + { + tone: '', + name: 'FunctionResponse', + label: 'Gets the result', + detail: 'exit 1 · pruned, kept', + }, + { tone: 'dim', name: 'FunctionCall', label: 'Edits a file', detail: 'resume.ts' }, + { tone: 'dim ok', name: 'endInvocation', label: 'Turn ends', detail: 'run completed' }, ], - highWater: 'highWater', + highWater: 'what the model still sees', caption: 'one turn · seven RuntimeEvents · append-only', formula: 'State(t) = Project(Log[0…t])', }, diff --git a/website/src/copy/types.ts b/website/src/copy/types.ts index 111a63dcb4..e8670941f6 100644 --- a/website/src/copy/types.ts +++ b/website/src/copy/types.ts @@ -47,7 +47,10 @@ export interface Copy { scene: { events: Array<{ tone: '' | 'mut' | 'warn' | 'ok' | 'dim' | 'dim ok'; + // The RuntimeEvent type, shown where the log tile explains the term. name: string; + // What the hero card says instead of the type name. + label: string; detail: string; }>; highWater: string; diff --git a/website/src/copy/zh-CN.ts b/website/src/copy/zh-CN.ts index 5f52f44fdf..3f76c02e8c 100644 --- a/website/src/copy/zh-CN.ts +++ b/website/src/copy/zh-CN.ts @@ -45,15 +45,20 @@ export const zhCN: Copy = { }, scene: { events: [ - { tone: 'mut', name: 'Text', detail: '「我重新跑一下失败的测试。」' }, - { tone: '', name: 'FunctionCall', detail: 'Bash · npm test' }, - { tone: 'warn', name: 'permissionRequest', detail: '超出沙箱' }, - { tone: 'ok', name: 'permissionDecision', detail: '你已批准' }, - { tone: '', name: 'FunctionResponse', detail: 'exit 1 · 裁剪展示,全量保留' }, - { tone: 'dim', name: 'FunctionCall', detail: 'Edit · resume.ts' }, - { tone: 'dim ok', name: 'endInvocation', detail: '运行完成' }, + { tone: 'mut', name: 'Text', label: '模型说', detail: '「我重新跑一下失败的测试。」' }, + { tone: '', name: 'FunctionCall', label: '执行命令', detail: 'Bash · npm test' }, + { tone: 'warn', name: 'permissionRequest', label: '请求权限', detail: '超出沙箱' }, + { tone: 'ok', name: 'permissionDecision', label: '你批准了', detail: '已写进日志' }, + { + tone: '', + name: 'FunctionResponse', + label: '拿到结果', + detail: 'exit 1 · 裁剪展示,全量保留', + }, + { tone: 'dim', name: 'FunctionCall', label: '编辑文件', detail: 'resume.ts' }, + { tone: 'dim ok', name: 'endInvocation', label: '本轮结束', detail: '运行完成' }, ], - highWater: 'highWater', + highWater: '模型还能看到的部分', caption: '一轮交互 · 7 个 RuntimeEvent · 只追加写入', formula: 'State(t) = Project(Log[0…t])', }, From 8514c9e50efdd420987901f980b2939b461ccaa6 Mon Sep 17 00:00:00 2001 From: AstroHan Date: Fri, 4 Sep 2026 00:27:07 +0800 Subject: [PATCH 20/32] =?UTF-8?q?fix(website):=20say=20=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E6=97=B6=E4=BA=8B=E4=BB=B6=20for=20RuntimeEvent=20in=20Chinese?= =?UTF-8?q?=20prose?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Chinese prose used the type name as a noun. Generic runtime is 运行时 and the event is 运行时事件, with the type name given once in the log tile where the chips show it. Runtime Host stays untranslated: the Chinese docs and README use it as the component's proper name throughout. Generated-by: Claude Code --- website/src/copy/zh-CN.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/src/copy/zh-CN.ts b/website/src/copy/zh-CN.ts index 3f76c02e8c..2f19280fe8 100644 --- a/website/src/copy/zh-CN.ts +++ b/website/src/copy/zh-CN.ts @@ -59,12 +59,12 @@ export const zhCN: Copy = { { tone: 'dim ok', name: 'endInvocation', label: '本轮结束', detail: '运行完成' }, ], highWater: '模型还能看到的部分', - caption: '一轮交互 · 7 个 RuntimeEvent · 只追加写入', + caption: '一轮交互 · 7 条运行时事件 · 只追加写入', formula: 'State(t) = Project(Log[0…t])', }, measured: { h2: '只认实测数据,只信落盘记录。', - p: '这个站点今天能证明两件事:在同一个模型上,Maka 比其他 harness 究竟表现如何;以及 Runtime 工作时到底记下了什么。', + p: '这个站点今天能证明两件事:在同一个模型上,Maka 比其他 harness 究竟表现如何;以及运行时工作时到底记下了什么。', }, leaderboard: { h3: '9 个 harness,同一个模型,官方验证器', @@ -89,7 +89,7 @@ export const zhCN: Copy = { }, log: { h3: '日志即运行时', - p: '每条消息、每次工具调用、每个权限决定和每次终止,都是一条只追加的 RuntimeEvent。界面、下一轮 prompt 和崩溃恢复都从这份日志推导出来,日志之外没有第二份权威副本。', + p: '每条消息、每次工具调用、每个权限决定和每次终止,都是一条只追加写入的运行时事件(RuntimeEvent)。界面、下一轮 prompt 和崩溃恢复都从这份日志推导出来,日志之外没有第二份权威副本。', more: 'Log Is the Runtime', }, get: { From fd1cbd315c8cad5dbbdc5985837d6c526c1016b7 Mon Sep 17 00:00:00 2001 From: AstroHan Date: Fri, 4 Sep 2026 00:28:57 +0800 Subject: [PATCH 21/32] =?UTF-8?q?fix(website):=20call=20the=20Runtime=20Ho?= =?UTF-8?q?st=20=E8=BF=90=E8=A1=8C=E6=97=B6=E5=AE=BF=E4=B8=BB=20in=20Chine?= =?UTF-8?q?se?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Host pairs with 客户端 the way the tile already says 瘦客户端, and a visitor reads it without knowing the codebase. The English name is given once in parentheses and the diagram box keeps it, since that is what the docs call the component. Generated-by: Claude Code --- website/src/copy/zh-CN.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/src/copy/zh-CN.ts b/website/src/copy/zh-CN.ts index 2f19280fe8..c4ef206409 100644 --- a/website/src/copy/zh-CN.ts +++ b/website/src/copy/zh-CN.ts @@ -80,9 +80,9 @@ export const zhCN: Copy = { statSmall: 'pp · 68.5% 对 55.1%', }, host: { - h3: '只有一个 Runtime Host', - p: 'Desktop、TUI、CLI 和 Eval 都是瘦客户端,执行统一交给同一个 Runtime Host。', - more: '了解 Host 如何工作', + h3: '只有一个运行时宿主', + p: 'Desktop、TUI、CLI 和 Eval 都是瘦客户端,执行统一交给同一个运行时宿主(Runtime Host)。', + more: '了解运行时宿主如何工作', clients: ['Desktop', 'TUI / CLI', 'Eval'], core: 'Runtime Host', coreSmall: '掌控执行', @@ -102,7 +102,7 @@ export const zhCN: Copy = { }, source: { title: '从源码构建', - body: '克隆 apache/maka,然后 npm ci 和 npm run build。Desktop、TUI 和 CLI 共用同一个 Runtime Host。', + body: '克隆 apache/maka,然后 npm ci 和 npm run build。Desktop、TUI 和 CLI 共用同一个运行时宿主。', note: 'APACHE-2.0', }, releases: { From 59c1c9b804ba76ec2c0e8baf03c8598e9f44eb1c Mon Sep 17 00:00:00 2001 From: AstroHan Date: Fri, 4 Sep 2026 00:51:10 +0800 Subject: [PATCH 22/32] fix(website): centre the paired stat in the tile it shares a row with The paired tile takes its height from the two-row leaderboard next to it, and the stat was pinned to the bottom, which left a hole under the shorter Chinese copy. Generated-by: Claude Code --- website/src/styles/site.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/website/src/styles/site.css b/website/src/styles/site.css index 8c049084a5..f48a86aece 100644 --- a/website/src/styles/site.css +++ b/website/src/styles/site.css @@ -564,6 +564,12 @@ h2 { } /* Big stat */ +/* The stat sits in the middle of whatever height the copy leaves, not glued to the bottom. */ +.tile .fig:has(> .stat) { + flex: 1; + display: flex; + align-items: center; +} .stat { font-size: 56px; font-weight: 600; From ef48f28fc7a5fef782462673eb43c96f37ec2be4 Mon Sep 17 00:00:00 2001 From: AstroHan Date: Fri, 4 Sep 2026 00:51:10 +0800 Subject: [PATCH 23/32] feat(website): append the hero events one by one and name the confirmed line The hero scene now plays its events in log order the first time it is seen, reusing the log tile observer and reduced-motion gate, so the append-only idea is shown rather than told. The high-water label "what the model still sees" was too abstract for a visitor; it now reads "confirmed up to here" with the events after it dimmed as still in flight. Generated-by: Claude Code --- website/src/components/Home.astro | 23 ++++++++++++----------- website/src/copy/en.ts | 2 +- website/src/copy/zh-CN.ts | 2 +- website/src/styles/site.css | 28 ++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/website/src/components/Home.astro b/website/src/components/Home.astro index ddb20e1114..b38d40fc02 100644 --- a/website/src/components/Home.astro +++ b/website/src/components/Home.astro @@ -64,9 +64,9 @@ const reads = [
-
+
{locales.map((locale) => locale === copy.locale ? ( {locale === 'en' ? 'EN' : '中文'} @@ -107,7 +107,7 @@ const asf = [ ), )}
- @@ -132,9 +132,11 @@ const asf = [ }); })(); // The toggle flips between light and dark and remembers the choice in this browser. + // Without JS it does nothing, so it stays hidden until this runs. (() => { const root = document.documentElement; const button = document.querySelector('.theme'); + button.hidden = false; const label = () => { button.setAttribute('aria-label', root.dataset.theme === 'dark' ? button.dataset.toLight : button.dataset.toDark); }; diff --git a/website/src/pages/index.astro b/website/src/pages/index.astro index ef5222fffb..0a5ca04128 100644 --- a/website/src/pages/index.astro +++ b/website/src/pages/index.astro @@ -17,6 +17,21 @@ * specific language governing permissions and limitations * under the License. */ -// The static build turns this into a meta-refresh page at /. -return Astro.redirect('/en/'); +// The root sends visitors to the English homepage at once. Astro's own +// redirect page waits two seconds first, so it is written out by hand. --- + + + + + + + + + Apache Maka (Incubating) + + + Apache Maka (Incubating) + diff --git a/website/test/site.test.mjs b/website/test/site.test.mjs index d6cf75f11f..ad428f281d 100644 --- a/website/test/site.test.mjs +++ b/website/test/site.test.mjs @@ -56,8 +56,14 @@ const hrefs = (html) => new Set([...html.matchAll(/href="([^"]+)"/gu)].map(([, h // document, and the site's own pages. Everything else must match. const normalize = (href) => href.replace(/\.zh-CN\.md$/u, '.md').replace(/^\/zh-CN\//u, '/en/'); -test('the root redirects to the English homepage', () => { - assert.match(page('index.html'), /url=\/en\//u); +test('the root redirects to the English homepage without a delay', () => { + assert.match(page('index.html'), /content="0;url=\/en\/"/u); +}); + +test('the font licenses ship with the fonts', () => { + for (const pkg of ['geist', 'geist-mono']) { + assert.match(page(`licenses/${pkg}/LICENSE`), /SIL Open Font License/u); + } }); test('every page identifies the podling and carries the Incubator disclaimer', () => { @@ -94,14 +100,26 @@ test('both languages link the same documents', () => { } }); +// Every absolute URL a page fetches while loading: scripts, images and the +// links that pull in a resource, but not the links a visitor clicks. +const thirdPartyLoads = (html) => + [...html.matchAll(/<(script|img|link)\b[^>]*>/gu)] + .filter( + ([tag, name]) => + name !== 'link' || /rel="(?:stylesheet|preload|modulepreload|icon)"/u.test(tag), + ) + .flatMap(([tag]) => [...tag.matchAll(/(?:src|href)="(https?:[^"]+)"/gu)].map(([, url]) => url)); + test('the site does not load anything from a third party', () => { + assert.deepEqual( + thirdPartyLoads( + 'ASF', + ), + ['https://cdn.example/t.js', 'https://fonts.example/a.css', 'https://img.example/a.png'], + ); for (const locale of locales) { for (const path of pages) { - const html = page(`${locale}/${path}`); - const loaded = [...html.matchAll(/(?:src|href)="(https?:[^"]+)"[^>]*>/gu)] - .filter(([tag]) => /<(?:link[^>]*rel="(?:stylesheet|preload|icon)"|script|img)/u.test(tag)) - .map(([, url]) => url); - assert.deepEqual(loaded, [], `${locale}/${path}`); + assert.deepEqual(thirdPartyLoads(page(`${locale}/${path}`)), [], `${locale}/${path}`); } } }); From fa4d824a2aec89632c2d3589b632ed95b7272ff8 Mon Sep 17 00:00:00 2001 From: AstroHan Date: Fri, 4 Sep 2026 00:59:43 +0800 Subject: [PATCH 27/32] fix(website): set the English headline in three balanced lines At 18ch the headline wrapped to four lines at every desktop width and pushed the scene below the fold. 24ch gives three lines from 1024px up and text-wrap: balance keeps them even. Generated-by: Claude Code --- website/src/styles/site.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/website/src/styles/site.css b/website/src/styles/site.css index 695ba50e64..7eb763bebc 100644 --- a/website/src/styles/site.css +++ b/website/src/styles/site.css @@ -258,12 +258,13 @@ h1.display { font-weight: 500; letter-spacing: -0.03em; margin: 0 auto 14px; - max-width: 18ch; + /* Three lines at every desktop width; the balance keeps them even. */ + max-width: 24ch; + text-wrap: balance; } /* CJK glyphs are a full em wide, so the Chinese headline needs its own measure to break in two lines. */ h1.display:lang(zh-CN) { max-width: 15em; - text-wrap: balance; } h1.display b { font-weight: 600; From 8178e0175ae86165a3af39ea41b7675a66d32d0c Mon Sep 17 00:00:00 2001 From: AstroHan Date: Fri, 4 Sep 2026 01:07:54 +0800 Subject: [PATCH 28/32] fix(website): fold the site links into a menu under 900px Below 900px the link row was display: none with nothing in its place, so on a phone the Security and Community pages were unreachable and the links were gone from the accessibility tree too. The row now folds into a details menu at the right of the bar, built from the same list, with Get Maka inside it; under 720px the theme toggle gives way to make room at 360px, and the distribution URL on the downloads page wraps instead of widening the page. Generated-by: Claude Code --- website/src/copy/en.ts | 1 + website/src/copy/types.ts | 2 ++ website/src/copy/zh-CN.ts | 1 + website/src/layouts/Site.astro | 30 +++++++++++++++------ website/src/styles/site.css | 48 +++++++++++++++++++++++++++------- 5 files changed, 64 insertions(+), 18 deletions(-) diff --git a/website/src/copy/en.ts b/website/src/copy/en.ts index db64c7855f..d017a11cb3 100644 --- a/website/src/copy/en.ts +++ b/website/src/copy/en.ts @@ -39,6 +39,7 @@ export const en: Copy = { security: 'Security', asf: 'ASF', getMaka: 'Get Maka', + menu: 'Menu', }, hero: { headline: [ diff --git a/website/src/copy/types.ts b/website/src/copy/types.ts index e8670941f6..668b9f231c 100644 --- a/website/src/copy/types.ts +++ b/website/src/copy/types.ts @@ -35,6 +35,8 @@ export interface Copy { security: string; asf: string; getMaka: string; + // The narrow-screen menu that holds the links above. + menu: string; }; hero: { headline: [string, string, string]; diff --git a/website/src/copy/zh-CN.ts b/website/src/copy/zh-CN.ts index ed6766e5e8..9c1cbc54b6 100644 --- a/website/src/copy/zh-CN.ts +++ b/website/src/copy/zh-CN.ts @@ -34,6 +34,7 @@ export const zhCN: Copy = { security: '安全', asf: 'ASF', getMaka: '获取 Maka', + menu: '菜单', }, hero: { headline: ['一个高性能的 Agent 工作台,', '并完整记录', '它做过的每一件事。'], diff --git a/website/src/layouts/Site.astro b/website/src/layouts/Site.astro index 22e95c09db..8f1e99df94 100644 --- a/website/src/layouts/Site.astro +++ b/website/src/layouts/Site.astro @@ -40,6 +40,15 @@ const href = (locale: Locale) => `/${locale}/${path}`; const canonical = new URL(href(copy.locale), Astro.site); const home = `/${copy.locale}/`; const downloads = `/${copy.locale}/downloads/`; +// The site's own links: a row in the nav on wide screens, a menu on narrow ones. +const primary = [ + [links.docs, copy.nav.docs], + [downloads, copy.nav.downloads], + [links.eval, copy.nav.benchmarks], + [links.discussions, copy.nav.community], + [links.security, copy.nav.security], +]; +const current = (href: string) => (href === downloads && page === 'downloads' ? 'page' : undefined); // The ASF links every project site must carry, shown in the nav menu and the footer. const asf = [ [links.asf, copy.footer.foundation], @@ -87,11 +96,7 @@ const asf = [ Incubating