diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index 3361f46..0000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: Deploy VitePress to GitHub Pages - -on: - push: - branches: - - master - -permissions: - contents: read - pages: write - id-token: write - -concurrency: - group: pages - cancel-in-progress: false - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup pnpm - uses: pnpm/action-setup@v2 - with: - version: 10 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - cache: 'pnpm' - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Build VitePress - run: pnpm run web:build - - - name: Setup Pages - uses: actions/configure-pages@v4 - - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: .vitepress/dist - - deploy: - needs: build - runs-on: ubuntu-latest - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 2aa8c99..0000000 --- a/.gitignore +++ /dev/null @@ -1,144 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.* -!.env.example - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist -.output - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Sveltekit cache directory -.svelte-kit/ - -# vitepress build output -**/.vitepress/dist - -# vitepress cache directory -**/.vitepress/cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# Firebase cache directory -.firebase/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# pnpm -.pnpm-store - -# yarn v3 -.pnp.* -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions - -# Vite files -vite.config.js.timestamp-* -vite.config.ts.timestamp-* -.vite/ diff --git a/.vitepress/config.mts b/.vitepress/config.mts deleted file mode 100644 index b1c1d43..0000000 --- a/.vitepress/config.mts +++ /dev/null @@ -1,170 +0,0 @@ -import { defineConfig } from 'vitepress' -import { glob } from 'glob' -import path from 'path' -import fs from 'fs' -import { fileURLToPath } from 'url' - -const __dirname = path.dirname(fileURLToPath(import.meta.url)) - -// 加载最新文章数据 -function getLatestPostsData() { - // 开发时从 web 目录读取 - const webDataPath = path.join(__dirname, '..', 'web', 'latest-posts.json') - if (fs.existsSync(webDataPath)) { - return JSON.parse(fs.readFileSync(webDataPath, 'utf-8')) - } - return { categories: [] } -} - -// 自动生成 sidebar 的函数 -function getAutoSidebar(dir: string, title: string) { - const files = glob.sync(`web/${dir}/**/*.md`, { - ignore: [`web/${dir}/intro.md`], - }) - - const items = files - .map((file) => { - const link = file.replace('web', '').replace('.md', '') - // 从文件名或 frontmatter 获取显示名称 - const fileName = path.basename(file, '.md') - return { - text: fileName, - link, - } - }) - .sort((a, b) => a.text.localeCompare(b.text, 'zh-CN')) - - return [ - { - text: title, - collapsed: false, - items: [{ text: '📖 开始阅读', link: `/${dir}/intro` }, ...items], - }, - ] -} - -// https://vitepress.dev/reference/site-config -export default defineConfig({ - lang: 'zh-CN', - srcDir: 'web', - base: '/', - - // 网站图标配置 - head: [ - ['link', { rel: 'icon', href: '/favicon-32x32.png', type: 'image/png' }], - ['link', { rel: 'icon', href: '/favicon-32x32.png', type: 'image/svg+xml', sizes: '32x32' }], - ['link', { rel: 'apple-touch-icon', href: '/favicon-32x32.png', sizes: '180x180' }], - ], - - // 网站标题和描述 - title: 'Code & Think 💻', - description: '极客的编程笔记 | Code More, Think More', - - // 页面数据转换 - 为首页注入最新文章数据 - transformPageData: (pageData) => { - if (pageData.relativePath === 'index.md') { - return { - latestPosts: getLatestPostsData(), - } - } - return {} - }, - - // 构建设置 - buildEnd: async () => { - // 构建完成后生成最新文章数据 - const { exec } = await import('child_process') - const { promisify } = await import('util') - const execAsync = promisify(exec) - - try { - await execAsync('node scripts/generate-latest-posts.js', { - cwd: path.join(__dirname, '..'), - }) - console.log('✅ 已生成 latest-posts.json') - - // 生成 sitemap - await execAsync('node scripts/generate-sitemap.js', { - cwd: path.join(__dirname, '..'), - }) - console.log('✅ 已生成 sitemap') - } catch (e) { - console.error('构建失败:', e) - } - }, - - themeConfig: { - // 暗色主题配置 - logo: '/favicon-32x32.png', - - // 搜索配置 - search: { - provider: 'local', - options: { - locales: { - 'zh-CN': { - translations: { - button: { - buttonText: '搜索', - buttonAriaLabel: '搜索文档', - }, - modal: { - noResultsText: '无法找到相关结果', - resetButtonTitle: '清除查询条件', - footer: { - selectText: '选择', - navigateText: '切换', - }, - }, - }, - }, - }, - }, - }, - - // 导航菜单 - nav: [ - { text: '🏠 首页', link: '/' }, - { text: '💡 技术', link: '/tech/intro' }, - { text: '📚 算法', link: '/algorithm/intro' }, - { text: '🛠️ 工具', link: '/tools/intro' }, - { text: '✨ 生活', link: '/life/intro' }, - { text: '📖 关于', link: '/about' }, - ], - - // 侧边栏配置 - 使用 glob 动态生成 - sidebar: { - '/tech/': getAutoSidebar('tech', '💡 技术文章'), - '/algorithm/': getAutoSidebar('algorithm', '📚 算法题解'), - '/tools/': getAutoSidebar('tools', '🛠️ 开源工具'), - '/life/': getAutoSidebar('life', '✨ 生活随笔'), - }, - - // 社交链接 - socialLinks: [{ icon: 'github', link: 'https://github.com/themycode' }], - - // 页脚配置 - footer: { - message: 'Made with ❤️ by Code & Think', - copyright: `Copyright © ${new Date().getFullYear()} All Rights Reserved`, - }, - - // 编辑链接 - editLink: { - pattern: 'https://github.com/themycode/themycode.github.io/edit/master/web/:path', - text: '📝 编辑此页', - }, - - // 最后更新时间 - lastUpdated: { - text: '最后更新于', - formatOptions: { - dateStyle: 'short', - timeStyle: 'medium', - }, - }, - - // 返回顶部按钮 - returnToTopLabel: '↑ 回到顶部', - }, -}) diff --git a/.vitepress/latest-posts.json b/.vitepress/latest-posts.json deleted file mode 100644 index 5417fa0..0000000 --- a/.vitepress/latest-posts.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "generated": "2026-03-24T04:53:16.393Z", - "categories": [ - { - "category": "技术", - "categoryIcon": "💡", - "categoryLink": "/tech/intro", - "posts": [ - { - "title": "Linux常用命令", - "link": "/tech/Linux常用命令", - "mtime": 1774326405393.871, - "category": "技术", - "categoryIcon": "💡", - "categoryLink": "/tech/intro" - } - ] - }, - { - "category": "算法", - "categoryIcon": "📚", - "categoryLink": "/algorithm/intro", - "posts": [ - { - "title": "常见排序算法", - "link": "/algorithm/常见排序算法", - "mtime": 1774324743303.046, - "category": "算法", - "categoryIcon": "📚", - "categoryLink": "/algorithm/intro" - } - ] - }, - { - "category": "工具", - "categoryIcon": "🛠️", - "categoryLink": "/tools/intro", - "posts": [ - { - "title": "发布操作指南", - "link": "/tools/发布操作指南", - "mtime": 1774327609127.5803, - "category": "工具", - "categoryIcon": "🛠️", - "categoryLink": "/tools/intro" - } - ] - }, - { - "category": "生活", - "categoryIcon": "✨", - "categoryLink": "/life/intro", - "posts": [] - } - ] -} \ No newline at end of file diff --git a/.vitepress/theme/Layout.vue b/.vitepress/theme/Layout.vue deleted file mode 100644 index e945bbf..0000000 --- a/.vitepress/theme/Layout.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts deleted file mode 100644 index ae73bc9..0000000 --- a/.vitepress/theme/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { h } from 'vue' -import type { Theme } from 'vitepress' -import DefaultTheme from 'vitepress/theme' -import Layout from './Layout.vue' - -export default { - extends: DefaultTheme, - Layout: Layout, -} satisfies Theme diff --git a/README.md b/README.md new file mode 100644 index 0000000..704e22b --- /dev/null +++ b/README.md @@ -0,0 +1,109 @@ +# The Cayman theme + +[![Build Status](https://travis-ci.org/pages-themes/cayman.svg?branch=master)](https://travis-ci.org/pages-themes/cayman) [![Gem Version](https://badge.fury.io/rb/jekyll-theme-cayman.svg)](https://badge.fury.io/rb/jekyll-theme-cayman) + +*Cayman is a Jekyll theme for GitHub Pages. You can [preview the theme to see what it looks like](http://pages-themes.github.io/cayman), or even [use it today](#usage).* + +![Thumbnail of Cayman](thumbnail.png) + +## Usage + +To use the Cayman theme: + +1. Add the following to your site's `_config.yml`: + + ```yml + theme: jekyll-theme-cayman + ``` + +2. Optionally, if you'd like to preview your site on your computer, add the following to your site's `Gemfile`: + + ```ruby + gem "github-pages", group: :jekyll_plugins + ``` + +## Customizing + +### Configuration variables + +Cayman will respect the following variables, if set in your site's `_config.yml`: + +```yml +title: [The title of your site] +description: [A short description of your site's purpose] +``` + +Additionally, you may choose to set the following optional variables: + +```yml +show_downloads: ["true" or "false" to indicate whether to provide a download URL] +google_analytics: [Your Google Analytics tracking ID] +``` + +### Stylesheet + +If you'd like to add your own custom styles: + +1. Create a file called `/assets/css/style.scss` in your site +2. Add the following content to the top of the file, exactly as shown: + ```scss + --- + --- + + @import "{{ site.theme }}"; + ``` +3. Add any custom CSS (or Sass, including imports) you'd like immediately after the `@import` line + +*Note: If you'd like to change the theme's Sass variables, you must set new values before the `@import` line in your stylesheet.* + +### Layouts + +If you'd like to change the theme's HTML layout: + +1. [Copy the original template](https://github.com/pages-themes/cayman/blob/master/_layouts/default.html) from the theme's repository
(*Pro-tip: click "raw" to make copying easier*) +2. Create a file called `/_layouts/default.html` in your site +3. Paste the default layout content copied in the first step +4. Customize the layout as you'd like + +### Overriding GitHub-generated URLs + +Templates often rely on URLs supplied by GitHub such as links to your repository or links to download your project. If you'd like to override one or more default URLs: + +1. Look at [the template source](https://github.com/pages-themes/cayman/blob/master/_layouts/default.html) to determine the name of the variable. It will be in the form of `{{ site.github.zip_url }}`. +2. Specify the URL that you'd like the template to use in your site's `_config.yml`. For example, if the variable was `site.github.url`, you'd add the following: + ```yml + github: + zip_url: http://example.com/download.zip + another_url: another value + ``` +3. When your site is built, Jekyll will use the URL you specified, rather than the default one provided by GitHub. + +*Note: You must remove the `site.` prefix, and each variable name (after the `github.`) should be indent with two space below `github:`.* + +For more information, see [the Jekyll variables documentation](https://jekyllrb.com/docs/variables/). + +## Roadmap + +See the [open issues](https://github.com/pages-themes/cayman/issues) for a list of proposed features (and known issues). + +## Project philosophy + +The Cayman theme is intended to make it quick and easy for GitHub Pages users to create their first (or 100th) website. The theme should meet the vast majority of users' needs out of the box, erring on the side of simplicity rather than flexibility, and provide users the opportunity to opt-in to additional complexity if they have specific needs or wish to further customize their experience (such as adding custom CSS or modifying the default layout). It should also look great, but that goes without saying. + +## Contributing + +Interested in contributing to Cayman? We'd love your help. Cayman is an open source project, built one contribution at a time by users like you. See [the CONTRIBUTING file](docs/CONTRIBUTING.md) for instructions on how to contribute. + +### Previewing the theme locally + +If you'd like to preview the theme locally (for example, in the process of proposing a change): + +1. Clone down the theme's repository (`git clone https://github.com/pages-themes/cayman`) +2. `cd` into the theme's directory +3. Run `script/bootstrap` to install the necessary dependencies +4. Run `bundle exec jekyll serve` to start the preview server +5. Visit [`localhost:4000`](http://localhost:4000) in your browser to preview the theme + +### Running tests + +The theme contains a minimal test suite, to ensure a site with the theme would build successfully. To run the tests, simply run `script/cibuild`. You'll need to run `script/bootstrap` once before the test script will work. diff --git a/package.json b/package.json deleted file mode 100644 index 0dd0bb9..0000000 --- a/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "devDependencies": { - "@giscus/vue": "^3.1.1", - "@types/node": "^25.5.0", - "glob": "^13.0.6", - "vitepress": "2.0.0-alpha.17" - }, - "scripts": { - "web:dev": "vitepress dev", - "web:build": "vitepress build", - "web:preview": "vitepress preview", - "update:intro": "node scripts/update-intro.js", - "generate:posts": "node scripts/generate-latest-posts.js", - "generate:sitemap": "node scripts/generate-sitemap.js" - }, - "type": "module" -} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 6b810c4..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,1535 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - devDependencies: - '@giscus/vue': - specifier: ^3.1.1 - version: 3.1.1(vue@3.5.30) - '@types/node': - specifier: ^25.5.0 - version: 25.5.0 - glob: - specifier: ^13.0.6 - version: 13.0.6 - vitepress: - specifier: 2.0.0-alpha.17 - version: 2.0.0-alpha.17(@types/node@25.5.0)(postcss@8.5.8) - -packages: - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.29.2.tgz} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.29.0.tgz} - engines: {node: '>=6.9.0'} - - '@docsearch/css@4.6.0': - resolution: {integrity: sha512-YlcAimkXclvqta47g47efzCM5CFxDwv2ClkDfEs/fC/Ak0OxPH2b3czwa4o8O1TRBf+ujFF2RiUwszz2fPVNJQ==, tarball: https://registry.npmmirror.com/@docsearch/css/-/css-4.6.0.tgz} - - '@docsearch/js@4.6.0': - resolution: {integrity: sha512-9/rbgkm/BgTq46cwxIohvSAz3koOFjnPpg0mwkJItAfzKbQIj+310PvwtgUY1YITDuGCag6yOL50GW2DBkaaBw==, tarball: https://registry.npmmirror.com/@docsearch/js/-/js-4.6.0.tgz} - - '@docsearch/sidepanel-js@4.6.0': - resolution: {integrity: sha512-lFT5KLwlzUmpoGArCScNoK41l9a22JYsEPwBzMrz+/ILVR5Ax87UphCuiyDFQWEvEmbwzn/kJx5W/O5BUlN1Rw==, tarball: https://registry.npmmirror.com/@docsearch/sidepanel-js/-/sidepanel-js-4.6.0.tgz} - - '@esbuild/aix-ppc64@0.27.4': - resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==, tarball: https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.27.4': - resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.27.4': - resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.27.4': - resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.27.4': - resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.4': - resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.27.4': - resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.4': - resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.27.4': - resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.27.4': - resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.27.4': - resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.27.4': - resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.27.4': - resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.27.4': - resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.4': - resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.27.4': - resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.27.4': - resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.27.4': - resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==, tarball: https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.4': - resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.27.4': - resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==, tarball: https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.4': - resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.27.4': - resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==, tarball: https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.27.4': - resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.27.4': - resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.27.4': - resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.27.4': - resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@giscus/vue@3.1.1': - resolution: {integrity: sha512-xgsc93MibRQ0d1glBxN1BrEREHTIf3BPYs/3R+UZHNqawFFoWBV6iJ7uVCXMqoEKZdE2c78B3aKt5gfGqo8I5A==, tarball: https://registry.npmmirror.com/@giscus/vue/-/vue-3.1.1.tgz} - peerDependencies: - vue: '>=3.2.0' - - '@iconify-json/simple-icons@1.2.75': - resolution: {integrity: sha512-KvcCUbvcBWb0sbqLIxHoY8z5/piXY08wcY9gfMhF+ph3AfzGMaSmZFkUY71HSXAljQngXkgs4bdKdekO0HQWvg==, tarball: https://registry.npmmirror.com/@iconify-json/simple-icons/-/simple-icons-1.2.75.tgz} - - '@iconify/types@2.0.0': - resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==, tarball: https://registry.npmmirror.com/@iconify/types/-/types-2.0.0.tgz} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, tarball: https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz} - - '@lit-labs/ssr-dom-shim@1.5.1': - resolution: {integrity: sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==, tarball: https://registry.npmmirror.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz} - - '@lit/reactive-element@2.1.2': - resolution: {integrity: sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==, tarball: https://registry.npmmirror.com/@lit/reactive-element/-/reactive-element-2.1.2.tgz} - - '@rolldown/pluginutils@1.0.0-rc.2': - resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==, tarball: https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz} - - '@rollup/rollup-android-arm-eabi@4.60.0': - resolution: {integrity: sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.0.tgz} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.60.0': - resolution: {integrity: sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.0.tgz} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.60.0': - resolution: {integrity: sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.0.tgz} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.60.0': - resolution: {integrity: sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.0.tgz} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.60.0': - resolution: {integrity: sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==, tarball: https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.0.tgz} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.60.0': - resolution: {integrity: sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==, tarball: https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.0.tgz} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.60.0': - resolution: {integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.0.tgz} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.60.0': - resolution: {integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.0.tgz} - cpu: [arm] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-arm64-gnu@4.60.0': - resolution: {integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.0.tgz} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm64-musl@4.60.0': - resolution: {integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.0.tgz} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-loong64-gnu@4.60.0': - resolution: {integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.0.tgz} - cpu: [loong64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-loong64-musl@4.60.0': - resolution: {integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.0.tgz} - cpu: [loong64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-ppc64-gnu@4.60.0': - resolution: {integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.0.tgz} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-ppc64-musl@4.60.0': - resolution: {integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.0.tgz} - cpu: [ppc64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-riscv64-gnu@4.60.0': - resolution: {integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.0.tgz} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-riscv64-musl@4.60.0': - resolution: {integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.0.tgz} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-s390x-gnu@4.60.0': - resolution: {integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.0.tgz} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-gnu@4.60.0': - resolution: {integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.0.tgz} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-musl@4.60.0': - resolution: {integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.0.tgz} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rollup/rollup-openbsd-x64@4.60.0': - resolution: {integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==, tarball: https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.0.tgz} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.60.0': - resolution: {integrity: sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==, tarball: https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.0.tgz} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.60.0': - resolution: {integrity: sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.0.tgz} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.60.0': - resolution: {integrity: sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.0.tgz} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.60.0': - resolution: {integrity: sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.0.tgz} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.60.0': - resolution: {integrity: sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.0.tgz} - cpu: [x64] - os: [win32] - - '@shikijs/core@3.23.0': - resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==, tarball: https://registry.npmmirror.com/@shikijs/core/-/core-3.23.0.tgz} - - '@shikijs/engine-javascript@3.23.0': - resolution: {integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==, tarball: https://registry.npmmirror.com/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz} - - '@shikijs/engine-oniguruma@3.23.0': - resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==, tarball: https://registry.npmmirror.com/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz} - - '@shikijs/langs@3.23.0': - resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==, tarball: https://registry.npmmirror.com/@shikijs/langs/-/langs-3.23.0.tgz} - - '@shikijs/themes@3.23.0': - resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==, tarball: https://registry.npmmirror.com/@shikijs/themes/-/themes-3.23.0.tgz} - - '@shikijs/transformers@3.23.0': - resolution: {integrity: sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ==, tarball: https://registry.npmmirror.com/@shikijs/transformers/-/transformers-3.23.0.tgz} - - '@shikijs/types@3.23.0': - resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==, tarball: https://registry.npmmirror.com/@shikijs/types/-/types-3.23.0.tgz} - - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==, tarball: https://registry.npmmirror.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, tarball: https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==, tarball: https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz} - - '@types/linkify-it@5.0.0': - resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==, tarball: https://registry.npmmirror.com/@types/linkify-it/-/linkify-it-5.0.0.tgz} - - '@types/markdown-it@14.1.2': - resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==, tarball: https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-14.1.2.tgz} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==, tarball: https://registry.npmmirror.com/@types/mdast/-/mdast-4.0.4.tgz} - - '@types/mdurl@2.0.0': - resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==, tarball: https://registry.npmmirror.com/@types/mdurl/-/mdurl-2.0.0.tgz} - - '@types/node@25.5.0': - resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==, tarball: https://registry.npmmirror.com/@types/node/-/node-25.5.0.tgz} - - '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==, tarball: https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.7.tgz} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==, tarball: https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz} - - '@types/web-bluetooth@0.0.21': - resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==, tarball: https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz} - - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==, tarball: https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz} - - '@vitejs/plugin-vue@6.0.5': - resolution: {integrity: sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg==, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.5.tgz} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - vue: ^3.2.25 - - '@vue/compiler-core@3.5.30': - resolution: {integrity: sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.30.tgz} - - '@vue/compiler-dom@3.5.30': - resolution: {integrity: sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.30.tgz} - - '@vue/compiler-sfc@3.5.30': - resolution: {integrity: sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.30.tgz} - - '@vue/compiler-ssr@3.5.30': - resolution: {integrity: sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.30.tgz} - - '@vue/devtools-api@8.1.1': - resolution: {integrity: sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw==, tarball: https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-8.1.1.tgz} - - '@vue/devtools-kit@8.1.1': - resolution: {integrity: sha512-gVBaBv++i+adg4JpH71k9ppl4soyR7Y2McEqO5YNgv0BI1kMZ7BDX5gnwkZ5COYgiCyhejZG+yGNrBAjj6Coqg==, tarball: https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-8.1.1.tgz} - - '@vue/devtools-shared@8.1.1': - resolution: {integrity: sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==, tarball: https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-8.1.1.tgz} - - '@vue/reactivity@3.5.30': - resolution: {integrity: sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.30.tgz} - - '@vue/runtime-core@3.5.30': - resolution: {integrity: sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==, tarball: https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.30.tgz} - - '@vue/runtime-dom@3.5.30': - resolution: {integrity: sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==, tarball: https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.30.tgz} - - '@vue/server-renderer@3.5.30': - resolution: {integrity: sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==, tarball: https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.30.tgz} - peerDependencies: - vue: 3.5.30 - - '@vue/shared@3.5.30': - resolution: {integrity: sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.5.30.tgz} - - '@vueuse/core@14.2.1': - resolution: {integrity: sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==, tarball: https://registry.npmmirror.com/@vueuse/core/-/core-14.2.1.tgz} - peerDependencies: - vue: ^3.5.0 - - '@vueuse/integrations@14.2.1': - resolution: {integrity: sha512-2LIUpBi/67PoXJGqSDQUF0pgQWpNHh7beiA+KG2AbybcNm+pTGWT6oPGlBgUoDWmYwfeQqM/uzOHqcILpKL7nA==, tarball: https://registry.npmmirror.com/@vueuse/integrations/-/integrations-14.2.1.tgz} - peerDependencies: - async-validator: ^4 - axios: ^1 - change-case: ^5 - drauu: ^0.4 - focus-trap: ^7 || ^8 - fuse.js: ^7 - idb-keyval: ^6 - jwt-decode: ^4 - nprogress: ^0.2 - qrcode: ^1.5 - sortablejs: ^1 - universal-cookie: ^7 || ^8 - vue: ^3.5.0 - peerDependenciesMeta: - async-validator: - optional: true - axios: - optional: true - change-case: - optional: true - drauu: - optional: true - focus-trap: - optional: true - fuse.js: - optional: true - idb-keyval: - optional: true - jwt-decode: - optional: true - nprogress: - optional: true - qrcode: - optional: true - sortablejs: - optional: true - universal-cookie: - optional: true - - '@vueuse/metadata@14.2.1': - resolution: {integrity: sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==, tarball: https://registry.npmmirror.com/@vueuse/metadata/-/metadata-14.2.1.tgz} - - '@vueuse/shared@14.2.1': - resolution: {integrity: sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==, tarball: https://registry.npmmirror.com/@vueuse/shared/-/shared-14.2.1.tgz} - peerDependencies: - vue: ^3.5.0 - - balanced-match@4.0.4: - resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-4.0.4.tgz} - engines: {node: 18 || 20 || >=22} - - birpc@2.9.0: - resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==, tarball: https://registry.npmmirror.com/birpc/-/birpc-2.9.0.tgz} - - brace-expansion@5.0.4: - resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-5.0.4.tgz} - engines: {node: 18 || 20 || >=22} - - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==, tarball: https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz} - - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==, tarball: https://registry.npmmirror.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==, tarball: https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz} - - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==, tarball: https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz} - - csstype@3.2.3: - resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==, tarball: https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, tarball: https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz} - engines: {node: '>=6'} - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==, tarball: https://registry.npmmirror.com/devlop/-/devlop-1.1.0.tgz} - - entities@7.0.1: - resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==, tarball: https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz} - engines: {node: '>=0.12'} - - esbuild@0.27.4: - resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.27.4.tgz} - engines: {node: '>=18'} - hasBin: true - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, tarball: https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - focus-trap@8.0.1: - resolution: {integrity: sha512-9ptSG6z51YQOstI/oN4XuVGP/03u2nh0g//qz7L6zX0i6PZiPnkcf3GenXq7N2hZnASXaMxTPpbKwdI+PFvxlw==, tarball: https://registry.npmmirror.com/focus-trap/-/focus-trap-8.0.1.tgz} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - giscus@1.6.0: - resolution: {integrity: sha512-Zrsi8r4t1LVW950keaWcsURuZUQwUaMKjvJgTCY125vkW6OiEBkatE7ScJDbpqKHdZwb///7FVC21SE3iFK3PQ==, tarball: https://registry.npmmirror.com/giscus/-/giscus-1.6.0.tgz} - - glob@13.0.6: - resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==, tarball: https://registry.npmmirror.com/glob/-/glob-13.0.6.tgz} - engines: {node: 18 || 20 || >=22} - - hast-util-to-html@9.0.5: - resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==, tarball: https://registry.npmmirror.com/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==, tarball: https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz} - - hookable@5.5.3: - resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==, tarball: https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz} - - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==, tarball: https://registry.npmmirror.com/html-void-elements/-/html-void-elements-3.0.0.tgz} - - lit-element@4.2.2: - resolution: {integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==, tarball: https://registry.npmmirror.com/lit-element/-/lit-element-4.2.2.tgz} - - lit-html@3.3.2: - resolution: {integrity: sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==, tarball: https://registry.npmmirror.com/lit-html/-/lit-html-3.3.2.tgz} - - lit@3.3.2: - resolution: {integrity: sha512-NF9zbsP79l4ao2SNrH3NkfmFgN/hBYSQo90saIVI1o5GpjAdCPVstVzO1MrLOakHoEhYkrtRjPK6Ob521aoYWQ==, tarball: https://registry.npmmirror.com/lit/-/lit-3.3.2.tgz} - - lru-cache@11.2.7: - resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-11.2.7.tgz} - engines: {node: 20 || >=22} - - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz} - - mark.js@8.11.1: - resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==, tarball: https://registry.npmmirror.com/mark.js/-/mark.js-8.11.1.tgz} - - mdast-util-to-hast@13.2.1: - resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==, tarball: https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz} - - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==, tarball: https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==, tarball: https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==, tarball: https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==, tarball: https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz} - - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==, tarball: https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz} - - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-10.2.4.tgz} - engines: {node: 18 || 20 || >=22} - - minipass@7.1.3: - resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==, tarball: https://registry.npmmirror.com/minipass/-/minipass-7.1.3.tgz} - engines: {node: '>=16 || 14 >=14.17'} - - minisearch@7.2.0: - resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==, tarball: https://registry.npmmirror.com/minisearch/-/minisearch-7.2.0.tgz} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - oniguruma-parser@0.12.1: - resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==, tarball: https://registry.npmmirror.com/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz} - - oniguruma-to-es@4.3.5: - resolution: {integrity: sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==, tarball: https://registry.npmmirror.com/oniguruma-to-es/-/oniguruma-to-es-4.3.5.tgz} - - path-scurry@2.0.2: - resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==, tarball: https://registry.npmmirror.com/path-scurry/-/path-scurry-2.0.2.tgz} - engines: {node: 18 || 20 || >=22} - - perfect-debounce@2.1.0: - resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==, tarball: https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-2.1.0.tgz} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz} - engines: {node: '>=12'} - - postcss@8.5.8: - resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.5.8.tgz} - engines: {node: ^10 || ^12 || >=14} - - property-information@7.1.0: - resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==, tarball: https://registry.npmmirror.com/property-information/-/property-information-7.1.0.tgz} - - regex-recursion@6.0.2: - resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==, tarball: https://registry.npmmirror.com/regex-recursion/-/regex-recursion-6.0.2.tgz} - - regex-utilities@2.3.0: - resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==, tarball: https://registry.npmmirror.com/regex-utilities/-/regex-utilities-2.3.0.tgz} - - regex@6.1.0: - resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==, tarball: https://registry.npmmirror.com/regex/-/regex-6.1.0.tgz} - - rollup@4.60.0: - resolution: {integrity: sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==, tarball: https://registry.npmmirror.com/rollup/-/rollup-4.60.0.tgz} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - shiki@3.23.0: - resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==, tarball: https://registry.npmmirror.com/shiki/-/shiki-3.23.0.tgz} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz} - engines: {node: '>=0.10.0'} - - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==, tarball: https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz} - - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==, tarball: https://registry.npmmirror.com/stringify-entities/-/stringify-entities-4.0.4.tgz} - - tabbable@6.4.0: - resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==, tarball: https://registry.npmmirror.com/tabbable/-/tabbable-6.4.0.tgz} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==, tarball: https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.15.tgz} - engines: {node: '>=12.0.0'} - - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==, tarball: https://registry.npmmirror.com/trim-lines/-/trim-lines-3.0.1.tgz} - - undici-types@7.18.2: - resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==, tarball: https://registry.npmmirror.com/undici-types/-/undici-types-7.18.2.tgz} - - unist-util-is@6.0.1: - resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==, tarball: https://registry.npmmirror.com/unist-util-is/-/unist-util-is-6.0.1.tgz} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==, tarball: https://registry.npmmirror.com/unist-util-position/-/unist-util-position-5.0.0.tgz} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==, tarball: https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz} - - unist-util-visit-parents@6.0.2: - resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==, tarball: https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz} - - unist-util-visit@5.1.0: - resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==, tarball: https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz} - - vfile-message@4.0.3: - resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==, tarball: https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==, tarball: https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz} - - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==, tarball: https://registry.npmmirror.com/vite/-/vite-7.3.1.tgz} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - vitepress@2.0.0-alpha.17: - resolution: {integrity: sha512-Z3VPUpwk/bHYqt1uMVOOK1/4xFiWQov1GNc2FvMdz6kvje4JRXEOngVI9C+bi5jeedMSHiA4dwKkff1NCvbZ9Q==, tarball: https://registry.npmmirror.com/vitepress/-/vitepress-2.0.0-alpha.17.tgz} - hasBin: true - peerDependencies: - markdown-it-mathjax3: ^4 - oxc-minify: '*' - postcss: ^8 - peerDependenciesMeta: - markdown-it-mathjax3: - optional: true - oxc-minify: - optional: true - postcss: - optional: true - - vue@3.5.30: - resolution: {integrity: sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==, tarball: https://registry.npmmirror.com/vue/-/vue-3.5.30.tgz} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==, tarball: https://registry.npmmirror.com/zwitch/-/zwitch-2.0.4.tgz} - -snapshots: - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/parser@7.29.2': - dependencies: - '@babel/types': 7.29.0 - - '@babel/types@7.29.0': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@docsearch/css@4.6.0': {} - - '@docsearch/js@4.6.0': {} - - '@docsearch/sidepanel-js@4.6.0': {} - - '@esbuild/aix-ppc64@0.27.4': - optional: true - - '@esbuild/android-arm64@0.27.4': - optional: true - - '@esbuild/android-arm@0.27.4': - optional: true - - '@esbuild/android-x64@0.27.4': - optional: true - - '@esbuild/darwin-arm64@0.27.4': - optional: true - - '@esbuild/darwin-x64@0.27.4': - optional: true - - '@esbuild/freebsd-arm64@0.27.4': - optional: true - - '@esbuild/freebsd-x64@0.27.4': - optional: true - - '@esbuild/linux-arm64@0.27.4': - optional: true - - '@esbuild/linux-arm@0.27.4': - optional: true - - '@esbuild/linux-ia32@0.27.4': - optional: true - - '@esbuild/linux-loong64@0.27.4': - optional: true - - '@esbuild/linux-mips64el@0.27.4': - optional: true - - '@esbuild/linux-ppc64@0.27.4': - optional: true - - '@esbuild/linux-riscv64@0.27.4': - optional: true - - '@esbuild/linux-s390x@0.27.4': - optional: true - - '@esbuild/linux-x64@0.27.4': - optional: true - - '@esbuild/netbsd-arm64@0.27.4': - optional: true - - '@esbuild/netbsd-x64@0.27.4': - optional: true - - '@esbuild/openbsd-arm64@0.27.4': - optional: true - - '@esbuild/openbsd-x64@0.27.4': - optional: true - - '@esbuild/openharmony-arm64@0.27.4': - optional: true - - '@esbuild/sunos-x64@0.27.4': - optional: true - - '@esbuild/win32-arm64@0.27.4': - optional: true - - '@esbuild/win32-ia32@0.27.4': - optional: true - - '@esbuild/win32-x64@0.27.4': - optional: true - - '@giscus/vue@3.1.1(vue@3.5.30)': - dependencies: - giscus: 1.6.0 - vue: 3.5.30 - - '@iconify-json/simple-icons@1.2.75': - dependencies: - '@iconify/types': 2.0.0 - - '@iconify/types@2.0.0': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@lit-labs/ssr-dom-shim@1.5.1': {} - - '@lit/reactive-element@2.1.2': - dependencies: - '@lit-labs/ssr-dom-shim': 1.5.1 - - '@rolldown/pluginutils@1.0.0-rc.2': {} - - '@rollup/rollup-android-arm-eabi@4.60.0': - optional: true - - '@rollup/rollup-android-arm64@4.60.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.60.0': - optional: true - - '@rollup/rollup-darwin-x64@4.60.0': - optional: true - - '@rollup/rollup-freebsd-arm64@4.60.0': - optional: true - - '@rollup/rollup-freebsd-x64@4.60.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.60.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.60.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.60.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.60.0': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.60.0': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.60.0': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.60.0': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.60.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.60.0': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.60.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.60.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.60.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.60.0': - optional: true - - '@rollup/rollup-openbsd-x64@4.60.0': - optional: true - - '@rollup/rollup-openharmony-arm64@4.60.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.60.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.60.0': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.60.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.60.0': - optional: true - - '@shikijs/core@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - - '@shikijs/engine-javascript@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.5 - - '@shikijs/engine-oniguruma@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/langs@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - - '@shikijs/themes@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - - '@shikijs/transformers@3.23.0': - dependencies: - '@shikijs/core': 3.23.0 - '@shikijs/types': 3.23.0 - - '@shikijs/types@3.23.0': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/vscode-textmate@10.0.2': {} - - '@types/estree@1.0.8': {} - - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/linkify-it@5.0.0': {} - - '@types/markdown-it@14.1.2': - dependencies: - '@types/linkify-it': 5.0.0 - '@types/mdurl': 2.0.0 - - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/mdurl@2.0.0': {} - - '@types/node@25.5.0': - dependencies: - undici-types: 7.18.2 - - '@types/trusted-types@2.0.7': {} - - '@types/unist@3.0.3': {} - - '@types/web-bluetooth@0.0.21': {} - - '@ungap/structured-clone@1.3.0': {} - - '@vitejs/plugin-vue@6.0.5(vite@7.3.1(@types/node@25.5.0))(vue@3.5.30)': - dependencies: - '@rolldown/pluginutils': 1.0.0-rc.2 - vite: 7.3.1(@types/node@25.5.0) - vue: 3.5.30 - - '@vue/compiler-core@3.5.30': - dependencies: - '@babel/parser': 7.29.2 - '@vue/shared': 3.5.30 - entities: 7.0.1 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - - '@vue/compiler-dom@3.5.30': - dependencies: - '@vue/compiler-core': 3.5.30 - '@vue/shared': 3.5.30 - - '@vue/compiler-sfc@3.5.30': - dependencies: - '@babel/parser': 7.29.2 - '@vue/compiler-core': 3.5.30 - '@vue/compiler-dom': 3.5.30 - '@vue/compiler-ssr': 3.5.30 - '@vue/shared': 3.5.30 - estree-walker: 2.0.2 - magic-string: 0.30.21 - postcss: 8.5.8 - source-map-js: 1.2.1 - - '@vue/compiler-ssr@3.5.30': - dependencies: - '@vue/compiler-dom': 3.5.30 - '@vue/shared': 3.5.30 - - '@vue/devtools-api@8.1.1': - dependencies: - '@vue/devtools-kit': 8.1.1 - - '@vue/devtools-kit@8.1.1': - dependencies: - '@vue/devtools-shared': 8.1.1 - birpc: 2.9.0 - hookable: 5.5.3 - perfect-debounce: 2.1.0 - - '@vue/devtools-shared@8.1.1': {} - - '@vue/reactivity@3.5.30': - dependencies: - '@vue/shared': 3.5.30 - - '@vue/runtime-core@3.5.30': - dependencies: - '@vue/reactivity': 3.5.30 - '@vue/shared': 3.5.30 - - '@vue/runtime-dom@3.5.30': - dependencies: - '@vue/reactivity': 3.5.30 - '@vue/runtime-core': 3.5.30 - '@vue/shared': 3.5.30 - csstype: 3.2.3 - - '@vue/server-renderer@3.5.30(vue@3.5.30)': - dependencies: - '@vue/compiler-ssr': 3.5.30 - '@vue/shared': 3.5.30 - vue: 3.5.30 - - '@vue/shared@3.5.30': {} - - '@vueuse/core@14.2.1(vue@3.5.30)': - dependencies: - '@types/web-bluetooth': 0.0.21 - '@vueuse/metadata': 14.2.1 - '@vueuse/shared': 14.2.1(vue@3.5.30) - vue: 3.5.30 - - '@vueuse/integrations@14.2.1(focus-trap@8.0.1)(vue@3.5.30)': - dependencies: - '@vueuse/core': 14.2.1(vue@3.5.30) - '@vueuse/shared': 14.2.1(vue@3.5.30) - vue: 3.5.30 - optionalDependencies: - focus-trap: 8.0.1 - - '@vueuse/metadata@14.2.1': {} - - '@vueuse/shared@14.2.1(vue@3.5.30)': - dependencies: - vue: 3.5.30 - - balanced-match@4.0.4: {} - - birpc@2.9.0: {} - - brace-expansion@5.0.4: - dependencies: - balanced-match: 4.0.4 - - ccount@2.0.1: {} - - character-entities-html4@2.1.0: {} - - character-entities-legacy@3.0.0: {} - - comma-separated-tokens@2.0.3: {} - - csstype@3.2.3: {} - - dequal@2.0.3: {} - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - entities@7.0.1: {} - - esbuild@0.27.4: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.4 - '@esbuild/android-arm': 0.27.4 - '@esbuild/android-arm64': 0.27.4 - '@esbuild/android-x64': 0.27.4 - '@esbuild/darwin-arm64': 0.27.4 - '@esbuild/darwin-x64': 0.27.4 - '@esbuild/freebsd-arm64': 0.27.4 - '@esbuild/freebsd-x64': 0.27.4 - '@esbuild/linux-arm': 0.27.4 - '@esbuild/linux-arm64': 0.27.4 - '@esbuild/linux-ia32': 0.27.4 - '@esbuild/linux-loong64': 0.27.4 - '@esbuild/linux-mips64el': 0.27.4 - '@esbuild/linux-ppc64': 0.27.4 - '@esbuild/linux-riscv64': 0.27.4 - '@esbuild/linux-s390x': 0.27.4 - '@esbuild/linux-x64': 0.27.4 - '@esbuild/netbsd-arm64': 0.27.4 - '@esbuild/netbsd-x64': 0.27.4 - '@esbuild/openbsd-arm64': 0.27.4 - '@esbuild/openbsd-x64': 0.27.4 - '@esbuild/openharmony-arm64': 0.27.4 - '@esbuild/sunos-x64': 0.27.4 - '@esbuild/win32-arm64': 0.27.4 - '@esbuild/win32-ia32': 0.27.4 - '@esbuild/win32-x64': 0.27.4 - - estree-walker@2.0.2: {} - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - focus-trap@8.0.1: - dependencies: - tabbable: 6.4.0 - - fsevents@2.3.3: - optional: true - - giscus@1.6.0: - dependencies: - lit: 3.3.2 - - glob@13.0.6: - dependencies: - minimatch: 10.2.4 - minipass: 7.1.3 - path-scurry: 2.0.2 - - hast-util-to-html@9.0.5: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.1 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.4 - zwitch: 2.0.4 - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hookable@5.5.3: {} - - html-void-elements@3.0.0: {} - - lit-element@4.2.2: - dependencies: - '@lit-labs/ssr-dom-shim': 1.5.1 - '@lit/reactive-element': 2.1.2 - lit-html: 3.3.2 - - lit-html@3.3.2: - dependencies: - '@types/trusted-types': 2.0.7 - - lit@3.3.2: - dependencies: - '@lit/reactive-element': 2.1.2 - lit-element: 4.2.2 - lit-html: 3.3.2 - - lru-cache@11.2.7: {} - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - mark.js@8.11.1: {} - - mdast-util-to-hast@13.2.1: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.0 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.1.0 - vfile: 6.0.3 - - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-encode@2.0.1: {} - - micromark-util-sanitize-uri@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 - - micromark-util-symbol@2.0.1: {} - - micromark-util-types@2.0.2: {} - - minimatch@10.2.4: - dependencies: - brace-expansion: 5.0.4 - - minipass@7.1.3: {} - - minisearch@7.2.0: {} - - nanoid@3.3.11: {} - - oniguruma-parser@0.12.1: {} - - oniguruma-to-es@4.3.5: - dependencies: - oniguruma-parser: 0.12.1 - regex: 6.1.0 - regex-recursion: 6.0.2 - - path-scurry@2.0.2: - dependencies: - lru-cache: 11.2.7 - minipass: 7.1.3 - - perfect-debounce@2.1.0: {} - - picocolors@1.1.1: {} - - picomatch@4.0.3: {} - - postcss@8.5.8: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - property-information@7.1.0: {} - - regex-recursion@6.0.2: - dependencies: - regex-utilities: 2.3.0 - - regex-utilities@2.3.0: {} - - regex@6.1.0: - dependencies: - regex-utilities: 2.3.0 - - rollup@4.60.0: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.60.0 - '@rollup/rollup-android-arm64': 4.60.0 - '@rollup/rollup-darwin-arm64': 4.60.0 - '@rollup/rollup-darwin-x64': 4.60.0 - '@rollup/rollup-freebsd-arm64': 4.60.0 - '@rollup/rollup-freebsd-x64': 4.60.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.60.0 - '@rollup/rollup-linux-arm-musleabihf': 4.60.0 - '@rollup/rollup-linux-arm64-gnu': 4.60.0 - '@rollup/rollup-linux-arm64-musl': 4.60.0 - '@rollup/rollup-linux-loong64-gnu': 4.60.0 - '@rollup/rollup-linux-loong64-musl': 4.60.0 - '@rollup/rollup-linux-ppc64-gnu': 4.60.0 - '@rollup/rollup-linux-ppc64-musl': 4.60.0 - '@rollup/rollup-linux-riscv64-gnu': 4.60.0 - '@rollup/rollup-linux-riscv64-musl': 4.60.0 - '@rollup/rollup-linux-s390x-gnu': 4.60.0 - '@rollup/rollup-linux-x64-gnu': 4.60.0 - '@rollup/rollup-linux-x64-musl': 4.60.0 - '@rollup/rollup-openbsd-x64': 4.60.0 - '@rollup/rollup-openharmony-arm64': 4.60.0 - '@rollup/rollup-win32-arm64-msvc': 4.60.0 - '@rollup/rollup-win32-ia32-msvc': 4.60.0 - '@rollup/rollup-win32-x64-gnu': 4.60.0 - '@rollup/rollup-win32-x64-msvc': 4.60.0 - fsevents: 2.3.3 - - shiki@3.23.0: - dependencies: - '@shikijs/core': 3.23.0 - '@shikijs/engine-javascript': 3.23.0 - '@shikijs/engine-oniguruma': 3.23.0 - '@shikijs/langs': 3.23.0 - '@shikijs/themes': 3.23.0 - '@shikijs/types': 3.23.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - source-map-js@1.2.1: {} - - space-separated-tokens@2.0.2: {} - - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - - tabbable@6.4.0: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - trim-lines@3.0.1: {} - - undici-types@7.18.2: {} - - unist-util-is@6.0.1: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@6.0.2: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - - unist-util-visit@5.1.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.2 - - vfile-message@4.0.3: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.3 - - vite@7.3.1(@types/node@25.5.0): - dependencies: - esbuild: 0.27.4 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.8 - rollup: 4.60.0 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 25.5.0 - fsevents: 2.3.3 - - vitepress@2.0.0-alpha.17(@types/node@25.5.0)(postcss@8.5.8): - dependencies: - '@docsearch/css': 4.6.0 - '@docsearch/js': 4.6.0 - '@docsearch/sidepanel-js': 4.6.0 - '@iconify-json/simple-icons': 1.2.75 - '@shikijs/core': 3.23.0 - '@shikijs/transformers': 3.23.0 - '@shikijs/types': 3.23.0 - '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 6.0.5(vite@7.3.1(@types/node@25.5.0))(vue@3.5.30) - '@vue/devtools-api': 8.1.1 - '@vue/shared': 3.5.30 - '@vueuse/core': 14.2.1(vue@3.5.30) - '@vueuse/integrations': 14.2.1(focus-trap@8.0.1)(vue@3.5.30) - focus-trap: 8.0.1 - mark.js: 8.11.1 - minisearch: 7.2.0 - shiki: 3.23.0 - vite: 7.3.1(@types/node@25.5.0) - vue: 3.5.30 - optionalDependencies: - postcss: 8.5.8 - transitivePeerDependencies: - - '@types/node' - - async-validator - - axios - - change-case - - drauu - - fuse.js - - idb-keyval - - jiti - - jwt-decode - - less - - lightningcss - - nprogress - - qrcode - - sass - - sass-embedded - - sortablejs - - stylus - - sugarss - - terser - - tsx - - typescript - - universal-cookie - - yaml - - vue@3.5.30: - dependencies: - '@vue/compiler-dom': 3.5.30 - '@vue/compiler-sfc': 3.5.30 - '@vue/runtime-dom': 3.5.30 - '@vue/server-renderer': 3.5.30(vue@3.5.30) - '@vue/shared': 3.5.30 - - zwitch@2.0.4: {} diff --git a/scripts/generate-latest-posts.js b/scripts/generate-latest-posts.js deleted file mode 100644 index a38b74b..0000000 --- a/scripts/generate-latest-posts.js +++ /dev/null @@ -1,180 +0,0 @@ -import fs from 'fs' -import path from 'path' -import { fileURLToPath } from 'url' -import { glob } from 'glob' - -const __dirname = path.dirname(fileURLToPath(import.meta.url)) -const ROOT_DIR = path.join(__dirname, '..') -const WEB_DIR = path.join(ROOT_DIR, 'web') - -// 分类配置 -const CATEGORIES = [ - { id: 'tech', name: '技术', icon: '💡', link: '/tech/intro' }, - { id: 'algorithm', name: '算法', icon: '📚', link: '/algorithm/intro' }, - { id: 'tools', name: '工具', icon: '🛠️', link: '/tools/intro' }, - { id: 'life', name: '生活', icon: '✨', link: '/life/intro' }, -] - -/** - * 从 markdown 文件 frontmatter 或文件名获取标题 - */ -function getFileTitle(filePath) { - const content = fs.readFileSync(filePath, 'utf-8') - const frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/) - - if (frontmatterMatch) { - const frontmatter = frontmatterMatch[1] - const titleMatch = frontmatter.match(/title:\s*["']?(.+?)["']?\s*$/) - if (titleMatch) { - return titleMatch[1].trim() - } - } - - const fileName = path.basename(filePath, '.md') - return fileName.replace(/[-_]/g, ' ') -} - -/** - * 获取文件修改时间 - */ -function getFileMtime(filePath) { - try { - const stats = fs.statSync(filePath) - return stats.mtimeMs - } catch { - return 0 - } -} - -/** - * 获取所有分类的最新文章 - */ -function getLatestPosts(limitPerCategory = 3) { - const result = [] - - for (const category of CATEGORIES) { - const categoryDir = path.join(WEB_DIR, category.id) - - if (!fs.existsSync(categoryDir)) { - continue - } - - // 获取该分类下所有 md 文件(排除 intro.md) - const files = glob.sync('*.md', { - cwd: categoryDir, - ignore: ['intro.md'], - }) - - // 获取文件信息并排序(按修改时间) - const filesWithMeta = files.map((file) => { - const filePath = path.join(categoryDir, file) - return { - title: getFileTitle(filePath), - link: `/${category.id}/${file.replace('.md', '')}`, - mtime: getFileMtime(filePath), - category: category.name, - categoryIcon: category.icon, - categoryLink: category.link, - } - }) - - // 按修改时间倒序排序,取最新的 - filesWithMeta.sort((a, b) => b.mtime - a.mtime) - const latest = filesWithMeta.slice(0, limitPerCategory) - - result.push({ - category: category.name, - categoryIcon: category.icon, - categoryLink: category.link, - posts: latest, - }) - } - - return result -} - -/** - * 生成主页最新文章 HTML 片段 - */ -function generateHomeSection(latestPosts) { - let html = `
\n` - - for (const category of latestPosts) { - if (category.posts.length === 0) continue - - html += `
\n` - html += `
\n` - html += ` ${category.categoryIcon}\n` - html += `

${category.category}

\n` - html += ` 更多 →\n` - html += `
\n` - html += ` \n` - html += `
\n\n` - } - - html += `
` - return html -} - -/** - * 更新 index.md 中的最新文章区域 - */ -function updateIndexMd(latestPosts) { - const indexMdPath = path.join(WEB_DIR, 'index.md') - - if (!fs.existsSync(indexMdPath)) { - console.log('⚠️ index.md 不存在,跳过') - return - } - - let content = fs.readFileSync(indexMdPath, 'utf-8') - - // 匹配 ## 📰 最近更新 下面的 posts-grid 区域(非贪婪模式,到第一个 结束) - const postsGridRegex = /(## 📰 最近更新\n\n)
[\s\S]*?<\/div>(\n\n diff --git a/web/latest-posts.json b/web/latest-posts.json deleted file mode 100644 index f8cb5a3..0000000 --- a/web/latest-posts.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "generated": "2026-03-25T02:31:41.206Z", - "categories": [ - { - "category": "技术", - "categoryIcon": "💡", - "categoryLink": "/tech/intro", - "posts": [ - { - "title": "Linux常用命令", - "link": "/tech/Linux常用命令", - "mtime": 1774326405393.871, - "category": "技术", - "categoryIcon": "💡", - "categoryLink": "/tech/intro" - } - ] - }, - { - "category": "算法", - "categoryIcon": "📚", - "categoryLink": "/algorithm/intro", - "posts": [ - { - "title": "常见排序算法", - "link": "/algorithm/常见排序算法", - "mtime": 1774324743303.046, - "category": "算法", - "categoryIcon": "📚", - "categoryLink": "/algorithm/intro" - } - ] - }, - { - "category": "工具", - "categoryIcon": "🛠️", - "categoryLink": "/tools/intro", - "posts": [ - { - "title": "openclaw文档笔记", - "link": "/tools/openclaw文档笔记", - "mtime": 1774362476241.3455, - "category": "工具", - "categoryIcon": "🛠️", - "categoryLink": "/tools/intro" - }, - { - "title": "发布操作指南", - "link": "/tools/发布操作指南", - "mtime": 1774328270183.3196, - "category": "工具", - "categoryIcon": "🛠️", - "categoryLink": "/tools/intro" - } - ] - }, - { - "category": "生活", - "categoryIcon": "✨", - "categoryLink": "/life/intro", - "posts": [] - } - ] -} \ No newline at end of file diff --git a/web/life/intro.md b/web/life/intro.md deleted file mode 100644 index cce0ba1..0000000 --- a/web/life/intro.md +++ /dev/null @@ -1,29 +0,0 @@ -# ✨ 生活随笔 - -除了编程,生活中还有很多有趣的事。这里记录一些见闻、思考和感悟。 - -## 最新文章 -- 暂无文章,敬请期待... - - - - - - - - -## 主题分类 - -- **旅行游记** - 各地见闻 -- **读书笔记** - 推荐好书和感悟 -- **成长感悟** - 工作和生活中的收获 -- **日常分享** - 有趣的日常琐事 -- **互联网思考** - 关于技术浪潮的想法 - -## 最近更新 - -...未来敬请期待 🌟 - ---- - -生活不只是代码,还有诗和远方。 diff --git a/web/markdown-examples.md b/web/markdown-examples.md deleted file mode 100644 index f9258a5..0000000 --- a/web/markdown-examples.md +++ /dev/null @@ -1,85 +0,0 @@ -# Markdown Extension Examples - -This page demonstrates some of the built-in markdown extensions provided by VitePress. - -## Syntax Highlighting - -VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting: - -**Input** - -````md -```js{4} -export default { - data () { - return { - msg: 'Highlighted!' - } - } -} -``` -```` - -**Output** - -```js{4} -export default { - data () { - return { - msg: 'Highlighted!' - } - } -} -``` - -## Custom Containers - -**Input** - -```md -::: info -This is an info box. -::: - -::: tip -This is a tip. -::: - -::: warning -This is a warning. -::: - -::: danger -This is a dangerous warning. -::: - -::: details -This is a details block. -::: -``` - -**Output** - -::: info -This is an info box. -::: - -::: tip -This is a tip. -::: - -::: warning -This is a warning. -::: - -::: danger -This is a dangerous warning. -::: - -::: details -This is a details block. -::: - -## More - -Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown). diff --git a/web/public/favicon-32x32.png b/web/public/favicon-32x32.png deleted file mode 100644 index a7abcad..0000000 Binary files a/web/public/favicon-32x32.png and /dev/null differ diff --git a/web/sitemap.md b/web/sitemap.md deleted file mode 100644 index 71d61f5..0000000 --- a/web/sitemap.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 全部文章 ---- - -# 📚 全部文章 - -本站所有文章列表,共 **4** 篇。 - -## 目录 - -- [💡 技术](#tech) - 1 篇 -- [📚 算法](#algorithm) - 1 篇 -- [🛠️ 工具](#tools) - 2 篇 - ---- - -## 💡 技术 - -- [Linux常用命令](/tech/Linux常用命令) - 2026/3/24 - -## 📚 算法 - -- [常见排序算法](/algorithm/常见排序算法) - 2026/3/24 - -## 🛠️ 工具 - -- [openclaw文档笔记](/tools/openclaw文档笔记) - 2026/3/24 -- [发布操作指南](/tools/发布操作指南) - 2026/3/24 - diff --git "a/web/tech/Linux\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/web/tech/Linux\345\270\270\347\224\250\345\221\275\344\273\244.md" deleted file mode 100644 index 1b9c719..0000000 --- "a/web/tech/Linux\345\270\270\347\224\250\345\221\275\344\273\244.md" +++ /dev/null @@ -1,47 +0,0 @@ -# 常用的命令做记录 - ---- - -### 1.文件搜索与内容处理 - -* **全局搜索,忽略大小写,忽略掉没有权限的目录** -`sudo find / -iname "*keyword*" 2>/dev/null` - -* **全局搜索包含特定字符串的文件内容** -`grep -rnw "." -e "search_term"` -参数含义:-r 递归, -n 行号, -w 全字匹配 - -* **查找最近24小时内修改过的文件** -`find . -mtime -1` - -* **清理当前目录下所有 .DS_Store 文件** -`find . -name ".DS_Store" -delete` - -* **统计当前目录下文件大小** -`du -sh *` - -* **查看目录占用大小并排序** -`du -sh */ | sort -rh` - ---- - -### 2.网络与端口调试 (Networking) - -在排查服务启动失败(如 address already in use)时最常用。 -* **查询指定端口被哪个进程占用:** - `lsof \-i :8080` - *(提示:-i 表示网络,后面直接跟冒号和端口号)* - -* **查看所有监听状态的端口 (macOS 推荐):** - `netstat \-ant | grep LISTEN` - -* **测试远程端口是否开启 (代替 telnet):** - `nc \-vz 127.0.0.1 8080` - *(参数 \-z 表示扫描而不发送数据,-v 是详细输出)* - -* **按名称模糊搜索并杀掉进程** -`pkill -9 -f "keyword"` - -* **查看资源占用情况** -`top -o cpu` macOS 按 CPU 排序 -`top -o mem` macOS 按内存 排序 diff --git a/web/tech/intro.md b/web/tech/intro.md deleted file mode 100644 index e122744..0000000 --- a/web/tech/intro.md +++ /dev/null @@ -1,25 +0,0 @@ -# 💡 技术文章 - -欢迎来到技术板块!这里分享关于 Web 开发、JavaScript、TypeScript、框架相关的深度技术文章。 - -## 最新文章 -- [Linux常用命令](/tech/Linux常用命令) - - - - -## 最新文章 -- [Linux常用命令](/tech/Linux常用命令) -- [Markdown Examples](/markdown-examples) - Markdown 语法示例 - - -## 分类导航 - -- **Frontend** - 前端开发、Vue、React 等 -- **Backend** - 后端开发、Node.js、数据库等 -- **DevOps** - 部署、容器化、CI/CD 等 -- **Best Practices** - 最佳实践和代码质量 - ---- - -更多文章敬请期待... ✨ diff --git a/web/tools/intro.md b/web/tools/intro.md deleted file mode 100644 index 6501593..0000000 --- a/web/tools/intro.md +++ /dev/null @@ -1,37 +0,0 @@ -# 🛠️ 开源工具 - -分享一些有用的开源工具、CLI 工具、VS Code 扩展等,希望能帮助提高开发效率。 - -## 工具列表 -- [发布操作指南](/tools/发布操作指南) - - - - - - - - -## 工具分类 - -- **开发工具** - Git、Docker、构建工具等 -- **编辑器插件** - VS Code 扩展推荐 -- **CLI 工具** - 命令行效率工具 -- **在线工具** - 便捷的在线应用 -- **编程库** - 常用库和框架 - -## 推荐工具 - -### 开发工具 -- **pnpm** - 快速、节省磁盘的包管理器 -- **Vite** - 下一代前端构建工具 -- **TypeScript** - JavaScript 的类型超集 - -### IDE 扩展 -- **GitHub Copilot** - AI 代码补全 -- **Prettier** - 代码格式化 -- **ESLint** - 代码检查 - ---- - -持续更新中... 📝 diff --git "a/web/tools/nvim\345\237\272\347\241\200\351\205\215\347\275\256.md" "b/web/tools/nvim\345\237\272\347\241\200\351\205\215\347\275\256.md" deleted file mode 100644 index a68da4c..0000000 --- "a/web/tools/nvim\345\237\272\347\241\200\351\205\215\347\275\256.md" +++ /dev/null @@ -1,23 +0,0 @@ -# nvim 配置记录 - -## 安装 - -### Windows系统配置 -1. 安装nvim,最快捷方便的方法 `scoop install nvim` -2. 安装 Lazy插件: `git clone https://github.com/folke/lazy.nvim.git ~/.local/share/nvim/lazy.nvim` -3. 在`~/.config/nvim/init.lua`中配置Lazy: -```lua - -```lua -require('lazy').setup({ - --插件列表 - {'nvim-lua/penary.nvim'}, - {'nvim-telescope/telescope.nvim'}, -}) -``` - -4. 启动 Neovim, Lazy会自动安装插件 -5. 常用命令: - - :Lazy 打开 Lazy管理界面 - - :Lazy sync 插件同步 - - :Lazy update 更新插件 diff --git "a/web/tools/openclaw\346\226\207\346\241\243\347\254\224\350\256\260.md" "b/web/tools/openclaw\346\226\207\346\241\243\347\254\224\350\256\260.md" deleted file mode 100644 index ea89423..0000000 --- "a/web/tools/openclaw\346\226\207\346\241\243\347\254\224\350\256\260.md" +++ /dev/null @@ -1,661 +0,0 @@ -# 🚀 OpenClaw 操作指南 - -> - 环境信息:Ubuntu Server | 版本:2026.3.2 -> - 核心用途:本地 LLM 网关与多渠道集成 -> - 软件环境: - - *后端: 用Ollama或vLLm 运行开源模型(deepseek、qwen等) - 模型管理层: LiteLLm Proxy - 前端: OpenClaw 链接LiteLLM* - -## 🛠️ 插件与渠道管理 - -### 1. qqbot配置机器人 - -#### **qq机器人:**[https://q.qq.com/qqbot/openclaw/index.html](https://q.qq.com/qqbot/openclaw/index.html) - -- 安装插件: - -```bash - openclaw plugins install @sliverp/qqbot@latest` - openclaw channels add --channel qqbot --token "token"` -``` - -### openclaw 获取令牌 - -unauthorized: too many failed authentication attempts (retry later)获取最新令牌 -`openclaw dashboard --no-open` - -### ssh 反代理 - -`ssh -N -L 18789:127.0.0.1:18789 -p2222 echo@192.168.110.1` - -### gateway 局域网访问配置 - -```json -"gateway": { - "port": 18789, - "mode": "local", - "bind": "loopback", - "controlUi": { - "allowedOrigins": [ - "http://localhost:18789", - "http://127.0.0.1:18789", - "http://192.168.110.1:18789" - ] - }, - "auth": { - "mode": "token", - "token": "xxxx" - }, - "tailscale": { - "mode": "off", - "resetOnExit": false - }, - "nodes": { - "denyCommands": [ - "camera.snap", - "camera.clip", - "screen.record", - "contacts.add", - "calendar.add", - "reminders.add", - "sms.send" - ] - } - } -``` - -### **自定义模型和外网第三方模型配置** - -```json - "models": { - // mode: 配置合并模式。"merge" 表示将此处的配置与全局默认配置合并,而不是完全覆盖。 - "mode": "merge", - "providers": { - // --- 第三方服务配置 (远程 API) --- - "claude-code": { - // baseUrl: 远程 API 的访问地址,这里通过中转接口接入 Claude。 - "baseUrl": "https://www.openai.com/api/v1", - // apiKey: 你的访问令牌(通行证),用于身份校验。 - "apiKey": "sk-xxx", - // api: 协议类型。anthropic-messages 表示使用 Claude 特有的对话格式。 - "api": "anthropic-messages", - "models": [ - { - // id: 传给 API 的原始模型名称。 - "id": "claude-haiku-4-5-20251001", - // name: 在 OpenClaw 界面上显示给用户看的友好名称。 - "name": "Claude Haiku 4.5" - } - ] - }, - // --- 本地模型配置 (通过 LiteLLM 代理) --- - "vllm": { - // baseUrl: 指向你本地运行的 LiteLLM 服务端口(4000)。 - "baseUrl": "http://127.0.0.1:4000/v1", - // apiKey: 因为是本地自建服务,通常填 sk-none 或自定义即可。 - "apiKey": "sk-none", - // api: 协议类型。openai-responses 表示遵循标准的 OpenAI 聊天接口协议。 - "api": "openai-responses", - "models": [ - { - // id: 对应 LiteLLM config.yaml 里的 model_name。 - "id": "qwen-coder-local", - "name": "qwen-coder-local", - // reasoning: 是否开启深度思考/推理链显示。Qwen 1.5B 属于常规模型,选 false。 - "reasoning": false, - // input: 接受的输入类型。 - "input": ["text"], - // cost: 计费设置。因为是本地运行,所有消耗设为 0(免费)。 - "cost": { - "input": 0, - "output": 0, - "cacheRead": 0, - "cacheWrite": 0 - }, - // contextWindow: 允许的最大上下文长度。虽然设为 128k,但 8G 内存建议实测时保持警惕。 - "contextWindow": 128000, - // maxTokens: 单次回复允许生成的最大长度。2048 是个稳健的选择。 - "maxTokens": 2048 - }, - { - // 第二个本地模型:DeepSeek-R1 推理模型。 - "id": "deepseek-r1-local", - "name": "local deepseek r1" - } - ] - } - } - }, - "agents": { - "defaults": { - // 模型路由配置:定义 Agent 优先使用谁,以及失败后的替补方案 - "model": { - // primary: 默认启动模型。 - // 选 Qwen-Coder 1.5B 是明智的,因为它在你 8GB 内存上加载极快。 - "primary": "vllm/qwen-coder-local", - - // fallbacks: 备选模型列表(按顺序尝试)。 - // 如果本地 Qwen 崩溃或 OOM(内存溢出),会自动尝试 DeepSeek,最后求助于云端 Claude。 - "fallbacks": [ - "vllm/deepseek-r1-local", - // 这个名称对应的是agent中的模型前缀!!! - "claude-code/claude-haiku-4-5-20251001" - ] - }, - - // 活跃模型池:只有出现在这里的模型,Agent 才有权调用。 - // 格式为 "供应商ID/模型ID": {局部参数微调} - "models": { - "vllm/qwen-coder-local": {}, - "vllm/deepseek-r1-local": {}, - "claude-code/claude-haiku-4-5-20251001": {} - }, - - // 上下文剪裁:决定如何清理过期的对话历史,防止内存被撑爆。 - "contextPruning": { - // mode: 剪裁模式。cache-ttl 表示基于缓存生存时间。 - "mode": "cache-ttl", - // ttl: 存活时间。1h 表示 1 小时前的对话上下文会被自动清理。 - "ttl": "1h" - }, - - // 压缩策略:当对话太长超过 contextWindow 时,Agent 如何“总结”前面的内容。 - "compaction": { - // mode: safeguard 是一种保护模式。 - // 它会在接近内存极限时强制进行摘要压缩,确保程序不崩溃。 - "mode": "safeguard" - }, - - // 心跳检查:Agent 的自我状态监测。 - "heartbeat": { - // every: 频率。每 30 分钟检查一次后台 Provider(如 LiteLLM)是否还在工作。 - "every": "30m" - } - } -} - - -agent/auth-profiles.json 配置 - -{ - "version": 1, - "profiles": { - "anthropic:default": { - "type": "api_key", - "provider": "anthropic", - "anthropicAuthToken": "sk-xxxx", - "anthropicBaseUrl": "https://www.oepnai.com/api/v1" - } - }, - "activeProfile": "default" -} -agent/models.json 配置 - -{ - "providers": { - "claude-code": { - "baseUrl": "https://www.openai.com/api/v1", - "apiKey": "sk-xxxx", - "api": "anthropic-messages", - "models": [ - { - "id": "claude-haiku-4-5-20251001", - "name": "Claude Haiku 4.5", - "reasoning": false, - "input": [ - "text" - ], - "cost": { - "input": 0, - "output": 0, - "cacheRead": 0, - "cacheWrite": 0 - }, - "contextWindow": 200000, - "maxTokens": 8192, - "api": "anthropic-messages" - } - ] - } - } -} -``` - ---- - -## Ollama 安装及常用命令 - -### **安装部署** - -**Ollama 官网:** **[https://ollama.com/](https://ollama.com/)** -**ubuntu install:** **_`curl -fsSL https://ollama.com/install.sh | sh`_** - -### **使用参考** - -**拉取模型**: `ollama pull deepseek-r1:7b` -**删除模型**: `ollama rm xxx` -**通过系统启动**:`sudo systemctl start ollama` -**运行模型**:`olama run deepseek-r1:7b` - -> **设置模型运行方式** -> 如果部署的环境显卡太老不能使用,需要进行服务启动的时候设置,不要使用显卡,打开service `vim /etc/system/system/ollama.service `,添加如下配置使用cpu模式运行`Environment="OLLAMA_LLM_LIBRARY=cpu"`,然后在重载服务启动。 -> Environment="OLLAMA_LLM_LIBRARY=cpu" # 配置cpu兼容模式 vim /etc/system/system/ollama.service -> sudo systemctl daemon-reload # 重载服务 - -### **使用方法** - -#### 常用命令 - -以下是 **Ollama 最常用命令的整理**,涵盖模型管理、运行、服务控制等核心功能,适合快速上手使用: - ---- - -#### **一、模型管理** - -| 命令 | 说明 | 示例 | -| ----------------------------- | ---------------------------------- | ---------------------------- | -| `ollama pull <模型名>` | 从仓库下载模型到本地 | `ollama pull llama2` | -| `ollama list` | 列出本地已下载的模型 | `ollama list` | -| `ollama rm <模型名>` | 删除本地模型 | `ollama rm llama2` | -| `ollama cp <源模型> <新模型>` | 复制模型生成副本(用于实验或修改) | `ollama cp llama2 my-llama2` | - ---- - -#### **二、模型运行** - -| 命令 | 说明 | 示例 | -| -------------------------------- | -------------------------------------------- | ------------------------------ | -| `ollama run <模型名>` | 启动模型并进入交互式对话 | `ollama run llama2` | -| `ollama run <模型名> --temp 0.7` | 运行模型时指定参数(如温度值控制生成随机性) | `ollama run gemma3 --temp 0.5` | -| `ollama chat <模型名>` | 启动聊天模式(适用于聊天机器人模型) | `ollama chat code-llama` | - ---- - -#### **三、服务控制** - -| 命令 | 说明 | 示例 | -| ---------------------- | ----------------------------------- | -------------------- | -| `ollama serve` | 启动本地 API 服务(默认端口 11434) | `ollama serve` | -| `ollama ps` | 查看当前运行的模型实例 | `ollama ps` | -| `ollama stop <模型名>` | 停止指定模型实例 | `ollama stop llama2` | - ---- - -#### **四、自定义模型** - -| 命令 | 说明 | 示例 | -| --------------------------------------- | ----------------------------- | -------------------------------------- | -| `ollama create <模型名> -f ` | 基于 Modelfile 创建自定义模型 | `ollama create mymodel -f ./Modelfile` | - ---- - -#### **五、其他实用命令** - -| 命令 | 说明 | 示例 | -| ---------------- | ------------------------ | -------------------- | -| `ollama version` | 查看 Ollama 版本 | `ollama version` | -| `ollama help` | 显示帮助信息 | `ollama help` | -| `ollama logs` | 查看运行日志(调试使用) | `ollama logs llama2` | - ---- - -#### **快速使用示例** - -1. **下载并运行模型**: - ```bash - ollama pull llama2 && ollama run llama2 - ``` -2. **创建自定义模型**: - ```bash - # 创建 Modelfile - echo "FROM llama2\nSYSTEM '你是一个编程助手'" > Modelfile - ollama create code-helper -f Modelfile - ollama run code-helper - ``` -3. **通过 API 调用模型**: - ```bash - curl http://127.0.0.1:11434/api/chat -d '{ - "model": "llama2", - "messages": [{"role": "user", "content": "你好"}] - }' - ``` - ---- - -#### **参数调优(可选)** - -在 `run` 或 `generate` 命令中可添加参数优化输出: - -```bash -ollama run llama2 --temp 0.3 --max-tokens 500 # 降低随机性,限制输出长度 -``` - ---- - -以上命令覆盖了 Ollama 的核心功能,如需更详细参数说明,可参考 https://ollama.ai/ 或通过 `ollama help <命令>` 查看具体用法。 - -### **API调用** - -```bash -curl http://localhost:11434/api/chat -d '{ - "model": "gemma3", - "messages": [{ "role": "user", "content": "Hello!" }] -}' -``` - -如果模型有返回就说明模型运行成功。 - -### **流式调用** - -```python -from ollama import chat - -stream = chat( - model='qwen3', - messages=[{'role': 'user', 'content': 'What is 17 × 23?'}], - stream=True, -) - -in_thinking = False -content = '' -thinking = '' -for chunk in stream: - if chunk.message.thinking: - if not in_thinking: - in_thinking = True - print('Thinking:\n', end='', flush=True) - print(chunk.message.thinking, end='', flush=True) - # accumulate the partial thinking - thinking += chunk.message.thinking - elif chunk.message.content: - if in_thinking: - in_thinking = False - print('\n\nAnswer:\n', end='', flush=True) - print(chunk.message.content, end='', flush=True) - # accumulate the partial content - content += chunk.message.content - - # append the accumulated fields to the messages for the next request - new_messages = [{ role: 'assistant', thinking: thinking, content: content }] -``` - -## LiteLLM Proxy 部署 - -### 1. **个人配置记录** - -```bash -# 新建目录 -mkdir ~/litellm-server && cd ~/litellm-server -# 创建新的python虚拟环境 -python3 -m venv env && source env/bin/activate -# 安装核心库(包含代理功能) -pip install 'litellm[proxy]' - -``` - -### 2.**编写配置文件** - -```YAML -model_list: - - model_name: qwen-coder-local # 你给 OpenClaw 用的名字 - litellm_params: - model: ollama/qwen2.5-coder:1.5b - api_base: "http://localhost:11434" # 连你的本地 Ollama - tpm: 100000 # 每分钟 token 限制,防止内存瞬间撑爆 - - - model_name: deepseek-r1-local - litellm_params: - model: ollama/deepseek-r1:7b - api_base: "http://localhost:11434" - num_ctx: 4096 # 8G 内存下,强烈建议限制上下文长度 - - # 如果以后你申请了云端 API,直接在这里加一行即可,OpenClaw 无需改动 - # - model_name: deepseek-v3 - # litellm_params: - # model: deepseek/deepseek-chat - # api_key: "sk-..." - -litellm_settings: - set_verbose: False # 生产环境关掉详细日志,省点 CPU - -``` - -### 3. **服务运行** - -`litellm --config config.yaml --port 4000 # 启动代理` - -### 4. **服务验证** - -```bash -验证是否配置成功 -curl --location 'http://localhost:4000/v1/chat/completions' \ ---header 'Content-Type: application/json' \ ---data '{ - "model": "qwen-coder-local", - "messages": [{"role": "user", "content": "hi"}] -}' -# 如果能看到 JSON 格式的回答,说明部署大功告成 - -# 使用 nohup 后台运行并记录日志 -nohup litellm --config config.yaml --port 4000 > litellm.log 2>&1 & - -``` - -### LiteLLM Proxy 官方网页 - -**LiteLLM: [https://docs.litellm.ai/](https://docs.litellm.ai/)** - -### 1. 概述 - -LiteLLM Proxy 是一个开源的 **大语言模型网关**,通过统一 OpenAI 兼容 API 接口,实现 **多模型管理、路由控制、安全防护** 等核心功能。支持本地模型(如 Ollama)、云服务(OpenAI/Azure)及混合部署,适用于企业级 LLM 应用开发与管理。 - ---- - -### 2. 核心功能 - -#### 2.1 统一接口 - -- **标准化调用**:将 100+ 模型的 API 统一为 OpenAI 格式(如 `chat.completions`) -- **跨平台兼容**:支持本地 Ollama、Azure OpenAI、Anthropic Claude 等服务 - -#### 2.2 集中式管理 - -- **模型目录**:通过 `config.yaml` 定义模型别名、API 地址、认证密钥 -- **权限控制**:基于 Virtual Key 的访问控制,支持速率限制(RPM/TPM)和预算管理 -- **监控审计**:记录请求日志、成本统计、错误追踪 - -#### 2.3 高级路由 - -- **负载均衡**:轮询、最低延迟等策略分配请求 -- **故障转移**:自动切换备用模型实例 -- **语义缓存**:缓存高频请求响应,降低 API 调用成本 - ---- - -### 3. 快速部署 - -#### 3.1 环境要求 - -- Python 3.8+ -- Docker(推荐生产环境) - -#### 3.2 Docker 部署(推荐) - -```bash -# 下载配置文件 -curl -O https://raw.githubusercontent.com/BerriAI/litellm/main/docker-compose.yml - -# 创建 .env 文件 -echo 'LITELLM_MASTER_KEY="sk-123456"' > .env -echo 'STORE_MODEL_IN_DB="True"' >> .env - -# 启动服务 -docker compose -p litellm up -d -``` - -#### 3.3 原生安装 - -```bash -pip install 'litellm[proxy]' -litellm --config config.yaml --port 4000 -``` - ---- - -### 4. 配置详解 - -#### 4.1 `config.yaml` 结构 - -```yaml -model_list: - - model_name: gpt-3.5-turbo - litellm_params: - model: openai/gpt-3.5-turbo - api_key: os.environ/OPENAI_API_KEY - rate_limit: 100 # 每分钟请求数 - - - model_name: ollama-llama3 - litellm_params: - model: ollama/llama3 - api_base: http://host.docker.internal:11434 - -general_settings: - database_url: postgresql://user:pass@localhost:5432/litellm - master_key: sk-123456 # 管理员密钥 -``` - -#### 4.2 关键参数 - -| 参数 | 说明 | 示例 | -| ------------ | ------------------ | ------------------------------ | -| `model_name` | 对外暴露的模型别名 | `claude-sonnet` | -| `api_base` | 模型服务地址 | `http://localhost:11434` | -| `rate_limit` | 速率限制(RPM) | `500` | -| `fallbacks` | 故障转移策略 | `[{"model": "gpt-3.5-turbo"}]` | - ---- - -### 5. 使用场景 - -#### 5.1 企业级 API 网关 - -- **多模型路由**:根据成本/延迟动态选择 OpenAI/Gemini/Ollama -- **安全防护**:IP 白名单、请求签名验证 -- **成本控制**:按团队分配预算,超支自动告警 - -#### 5.2 本地开发环境 - -```python -from openai import OpenAI - -client = OpenAI( - api_key="sk-123456", - base_url="http://localhost:4000" # LiteLLM Proxy 地址 -) - -response = client.chat.completions.create( - model="ollama-llama3", - messages=[{"role": "user", "content": "解释量子纠缠"}] -) -``` - -#### 5.3 多租户管理 - -- **团队隔离**:为不同团队分配独立 Virtual Key -- **资源配额**:限制每个 Key 的 API 调用频率和预算 - ---- - -### 6. 高级功能 - -#### 6.1 流式响应 - -```python -response = litellm.completion( - model="ollama/llama3", - messages=[{"role": "user", "content": "写一首俳句"}], - stream=True -) - -for chunk in response: - print(chunk.choices[0].delta.content, end="", flush=True) -``` - -#### 6.2 回退策略 - -```yaml -fallbacks: - - priority: 1 - condition: latency > 2.0 # 延迟超过 2 秒触发 - model: gpt-3.5-turbo - - priority: 2 - condition: error_rate > 0.1 - model: ollama/mistral -``` - -#### 6.3 监控仪表盘 - -访问 `http://localhost:4000/ui` 查看: - -- 实时请求统计 -- 模型使用率热力图 -- 错误日志分析 - ---- - -### 7. 最佳实践 - -1. **生产环境建议** - - 使用 PostgreSQL 持久化数据 - - 配置 HTTPS 反向代理(如 Nginx) - - 定期备份数据库 - -2. **性能优化** - - ```yaml - router_settings: - enable_cache: true - cache_ttl: 300 # 缓存有效期(秒) - batch_size: 5 # 并行请求数 - ``` - -3. **安全加固** - - 启用双因素认证 - - 限制管理接口 IP 访问 - - 定期轮换 `master_key` - ---- - -### 8. 常见问题 - -#### Q1: 如何迁移现有模型? - -```bash -# 导出现有配置 -litellm export-config > legacy_config.yaml - -# 转换为新格式 -litellm convert-config legacy_config.yaml -``` - -#### Q2: 如何监控 API 成本? - -通过管理界面查看 `Cost Analytics` 面板,或使用 Prometheus 导出指标: - -```promql -sum(rate(litellm_requests_total[5m])) by (model) -``` - ---- - -### 9. 参考资料 - -- https://github.com/BerriAI/litellm -- https://github.com/BerriAI/litellm-config-examples -- https://docs.litellm.ai/docs/proxy/deployment - ---- - -本网页覆盖 LiteLLM Proxy 的核心功能与典型用法,如需更详细的技术细节,可参考官方文档或通过社区论坛获取支持。 diff --git "a/web/tools/openclaw\347\254\254\344\270\211\346\226\271\346\250\241\345\236\213\351\205\215\347\275\256.md" "b/web/tools/openclaw\347\254\254\344\270\211\346\226\271\346\250\241\345\236\213\351\205\215\347\275\256.md" deleted file mode 100644 index 63e7a23..0000000 --- "a/web/tools/openclaw\347\254\254\344\270\211\346\226\271\346\250\241\345\236\213\351\205\215\347\275\256.md" +++ /dev/null @@ -1,43 +0,0 @@ -# openclaw第三方模型配置 - -## 直接修改openclaw.json文件最方面 -```json -"models": { - "mode": "merge", - "providers": { - "local": { - "baseUrl": "https://api.scnet.cn/api/llm/v1", - "apiKey": "您的模型API Key", - "api": "openai-completions", - "models": [ - { - "id": "MiniMax-M2.5", - "name": "MiniMax-M2.5", - "reasoning": false, - "input": [ - "text" - ], - "cost": { - "input": 0, - "output": 0, - "cacheRead": 0, - "cacheWrite": 0 - }, - "contextWindow": 128000, - "maxTokens": 16000 - } - ] - } - } - }, - "agents": { - "defaults": { - "model": { - "primary": "local/MiniMax-M2.5" - }, - "models": { - "local/MiniMax-M2.5": {} - }, - } - }, -``` \ No newline at end of file diff --git "a/web/tools/opencode\351\205\215\347\275\256\347\254\254\344\270\211\346\226\271\346\250\241\345\236\213.md" "b/web/tools/opencode\351\205\215\347\275\256\347\254\254\344\270\211\346\226\271\346\250\241\345\236\213.md" deleted file mode 100644 index 0074e1f..0000000 --- "a/web/tools/opencode\351\205\215\347\275\256\347\254\254\344\270\211\346\226\271\346\250\241\345\236\213.md" +++ /dev/null @@ -1,59 +0,0 @@ -# opencode 配置第三方模型 - -## 安装部署 - -### 安装 -- Node.js -```bash -npm isntall -g opencode-ai # npm -bun install -g opencode-ai # bun -pnpm install -g opencode-ai # pnpm -``` -- Macos & Linux -```bash -brew install anomalyco/tap/opencode -``` -- Windows -```bash -choco install opencode # choco -scoop install opencode # scoop -``` - -### 配置文件 -- 配置第三方模型的ID, 执行`opencode auth login` -- 选择other,然后输入provider id, 输入模型的key -- 然后在`~/.config/opencode/`,创建一个opencode.json文件,输入以下内容 -```json -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "local": { - "npm": "@ai-sdk/openai-compatible", - "name": "local", - "options": { - "baseURL": "https://api.scnet.cn/api/llm/v1", - }, - "models": { - "DeepSeek-V3.2": { "name": "DeepSeek-V3.2" }, - "MiniMax-M2.5": { "name": "MiniMax-M2.5" }, - "Qwen3-30B-A3B-Instruct-2507":{"name":"Qwen3-30B-A3B-Instruct-2507"}, - "Qwen3-235B-A22B-Thinking-2507":{"name":"Qwen3-235B-A22B-Thinking-2507"} - } - } - } -} -``` -- 然后重新打开模型,检查是否可以使用 - -- 注意事项:在第一步填写的provider id,在配置文件中对应的provider的key不要填错! - - -### 基础命令 -- 模型切换 switch model `ct + x m` -- 切换绘画 switch session `ct + x l` -- tab 切换模型的模式,ask/plan -- 常用命令 `ct + p` - - -### 参考 -[https://opencode.ai/docs/zh-cn](https://opencode.ai/docs/zh-cn) diff --git "a/web/tools/pixi\345\222\214uv\344\275\277\347\224\250\351\205\215\347\275\256\350\256\260\345\275\225.md" "b/web/tools/pixi\345\222\214uv\344\275\277\347\224\250\351\205\215\347\275\256\350\256\260\345\275\225.md" deleted file mode 100644 index 2ef6f86..0000000 --- "a/web/tools/pixi\345\222\214uv\344\275\277\347\224\250\351\205\215\347\275\256\350\256\260\345\275\225.md" +++ /dev/null @@ -1,174 +0,0 @@ -# pixi 和 uv 的使用与配置 - -## 安装 - -### pixi/uv -- 安装pixi ` scoop install pixi` -- 安装uv `scoop install uv` - -### 常见设置 -1. pixi需要设置环境变量, 使其安装的全局语言解释器可以使用`%USERPROFILE%\.pixi\bin`, 默认pixi安装在~/.pixi/bin目录下 -2. pixi查看安装的工具`pixi global list` -3. pixi全局安装`pixi global install python` - -### uv的使用记录 -1. **uv提供的强大的功能,比如想在项目下检查代码`uvx ruff check .` , 这样可以在项目下运行,不占用空间影响环境,针对不同的项目可以根据项目来运行 `uv add --dev ruff`** -2. ruff使用 - 1. 临时使用: 直接`uvx ruff format .` - 2. 项目中长期使用: 在项目中`uv add --dev ruff`,然后会在项目根目录放一个ruff.toml -3. 更改uv缓存目录, 在命令行临时设置`$env:UV_CACHE_DIR = "D:\uv_cache"`,永久生效添加环境变量 `UV_CACHE_DIR`,然后设置路径 -4. 空间清理命令 - 1. 清理不再使用的旧版本缓存: uv cache prune - 2. 清理所有缓存: uv cache clean -5. uv 使用节省空间方式, `uv sync --link-mode hardlink`,或者在全局配置文件中设置(~/.python/uv/config.toml),设置config.toml中写入`link-mode = "hardlink"`,也可以使用离线模式 `uv sync --offline` - -### uv项目中使用 -#### **uv 项目使用** -1. 初始化 `uv init ` -2. 创建环境 `uv venv --python 3.12` -3. 添加依赖 `uv add pandas requests` -4. 进阶技巧:如果你懒得手动加依赖 -如果你代码里的 import 太多了,不想一个一个 uv add,可以先让工具帮你扫描一下。 - 1. 安装 pipreqs(临时运行): - `uvx pipreqs . --force` -这会扫描你的 .py 文件并自动生成一个 requirements.txt。 - - 2. 一次性导入到 uv: - `uv add -r requirements.txt` -5. 环境验证, 查看python路径 - `uv run which python` -6. 在项目中运行脚本 - `uv run script.py` - - - -这份文档旨在为你构建一套基于 **Pixi(全局基础设施)** 与 **uv(项目执行专家)** 的高效开发流。考虑到你拥有两台不同年代的设备(2015 MacBook 和 10 年老台式机),这套方案将重心放在了**磁盘空间优化**与**环境一致性**上。 - -# --- - -**🚀 现代 Python 开发环境指南 (2026 版)** - -## **一、 核心架构:双剑合璧** - -为了实现系统级的纯净与项目级的高效,我们采用以下分工: - -* **Pixi (全局管家)**:负责安装 Python 解释器、Git、Node.js 及常用的 Rust 命令行工具(CLI)。 -* **uv (项目尖刀)**:负责管理具体项目的依赖、虚拟环境及运行脚本。 - -## --- - -**二、 Pixi:全局基础设施管理** - -### **1\. 基础配置** - -确保使用 **Scoop** 安装 Pixi 以便统一管理软件生命周期: - -PowerShell - -scoop install pixi - -### **2\. 全局工具清单** - -通过 Pixi 安装开发必备的底层运行时。这些工具会进入全局缓存,多个项目共享,不占额外空间。 - -PowerShell - -\# 安装核心语言环境 -pixi global install python=3.12 git uv - -\# 安装终端增强工具 (Rust 编写) -pixi global install bat eza zoxide ripgrep - -### **3\. 常用维护命令** - -* **查看已装工具**:pixi global list -* **更新所有工具**:pixi global upgrade-all -* **清理过期缓存 (MacBook 必做)**:pixi clean cache - -## --- - -**三、 uv:项目级极速管理** - -### **1\. 初始化一个新项目(或重置旧项目)** - -当你进入一个只有 .py 脚本的目录,或想重构旧环境时: - -PowerShell - -\# 初始化项目配置文件 (生成 pyproject.toml) -uv init - -\# 关联 Pixi 的 Python 创建虚拟环境 -uv venv \-\-python 3.12 - -### **2\. 依赖管理** - -uv 不会重复下载包,它通过硬链接(Hardlink)引用缓存,极大地节省了 250GB 硬盘的空间。 - -PowerShell - -\# 添加生产依赖 (如量化库) -uv add pandas numpy matplotlib - -\# 添加开发工具 (如 Ruff) -uv add \-\-dev ruff - -\# 同步环境 (当你修改了配置文件或在 MacBook 上拉取了代码) -uv sync - -### **3\. 运行与脚本** - -* **运行脚本**:uv run main.py(自动激活虚拟环境运行)。 -* **临时运行工具**:uvx ruff check .(无需安装,直接运行最新版工具)。 - -## --- - -**四、 插件与工具配置** - -### **1\. Tabby 终端设置** - -为了让你的 **Tabby** 飞起来,建议在配置文件中添加以下 Alias(别名): - -PowerShell - -\# 编辑 PowerShell 配置文件: notepad $PROFILE -\# 快速跳转 -alias ls\='eza \--icons' -alias cd\='z' - -\# 一键清理双重缓存 -function cleanup-all { - pixi clean cache - uv cache prune -} - -### **2\. VS Code / Cursor 插件配置** - -为了配合这套流程,建议安装以下扩展: - -* **Python (Microsoft)**:在右下角解释器选择器中,指向项目目录下的 .venv\\Scripts\\python.exe。 -* **Ruff (Astral Software)**: - * **设置**:在 settings.json 中开启 editor.formatOnSave: true。 - * **优势**:它能完美替代 Flake8 和 Black,且速度快 10-100 倍。 - -### **3\. 缓存位置优化(针对 MacBook)** - -如果你想精确控制 uv 的缓存位置(例如统一放在用户目录下): - -PowerShell - -\# 在环境变量中设置 -$env:UV\_CACHE\_DIR \= "$HOME\\.cache\\uv" - -## --- - -**五、 每日工作流建议** - -1. **开启新任务**:cd project \-\> uv sync -2. **写代码**:在 Tabby 中使用 vi 或在 VS Code 中编写。 -3. **运行实验**:uv run strategy.py -4. **定期瘦身**:每周运行一次 cleanup-all。 - -\[\!TIP\] - -**注意顺序**:如果在 Tabby 里提示找不到 python,请检查 where.exe python 是否指向了 \\.pixi\\bin\\python.exe。如果被 WindowsApps 拦截,请在“应用执行别名”中关闭微软自带的 Python 选项。 \ No newline at end of file diff --git "a/web/tools/\345\217\221\345\270\203\346\223\215\344\275\234\346\214\207\345\215\227.md" "b/web/tools/\345\217\221\345\270\203\346\223\215\344\275\234\346\214\207\345\215\227.md" deleted file mode 100644 index 8d84ef7..0000000 --- "a/web/tools/\345\217\221\345\270\203\346\223\215\344\275\234\346\214\207\345\215\227.md" +++ /dev/null @@ -1,144 +0,0 @@ ---- -title: 发布操作指南 ---- - -# 🚀 发布操作指南 - -本工具是一个自动化发布脚本,用于快速将项目部署到 GitHub Pages。 - -## 功能特性 - -- ✅ 自动构建静态资源 -- ✅ 一键推送到 GitHub Pages -- ✅ 支持自定义部署分支 -- ✅ 自动更新 sitemap -- ✅ 自动更新文章索引 -- ✅ 自动生成主页最新文章 - -## 快速开始 - -### 1. 安装依赖 - -```bash -pnpm install -``` - -### 2. 配置仓库 - -确保你的项目已经初始化 git 仓库,并且远程仓库已配置: - -```bash -git remote -v -``` - -如果没有配置,添加远程仓库: - -```bash -git remote add origin https://github.com/your-username/your-repo.git -``` - -### 3. 执行发布 - -```bash -pnpm run deploy -``` - -脚本会自动完成以下步骤: - -1. 执行 `pnpm run build` 构建项目 -2. 进入 `dist` 目录 -3. 初始化 git 并提交所有文件 -4. 强制推送到 `gh-pages` 分支 - -## 高级用法 - -### 自定义部署分支 - -```bash -# 部署到 main 分支 -pnpm run deploy:main - -# 部署到自定义分支 -DEPLOY_BRANCH=custom-branch pnpm run deploy -``` - -### 仅构建不推送 - -```bash -pnpm run build -``` - -构建产物会输出到 `dist` 目录。 - -### 自动更新文章索引 - -新建文章后,运行以下命令可自动将文章链接添加到对应分类的 `intro.md` 中: - -```bash -pnpm update:intro -``` - -脚本会: -1. 扫描各分类目录下的 `.md` 文件 -2. 从 frontmatter 或文件名获取文章标题 -3. 更新对应 `intro.md` 的文章列表 - -**示例:** -```bash -# 新建文章后 -echo "# 我的文章" > web/tech/新文章.md - -# 自动更新索引 -pnpm update:intro -``` - -### 自动生成主页最新文章 - -主页会自动显示各分类的最新文章(每个分类最多 3 篇)。构建时自动生成数据,无需手动操作。 - -**手动更新(开发模式):** -```bash -pnpm generate:posts -``` - -**自动更新(构建模式):** -```bash -pnpm web:build -# buildEnd 钩子会自动运行 generate:posts -``` - -**效果:** -- 主页 features 下方会显示 "📰 最近更新" 区域 -- 按分类展示最新文章标题 -- 点击文章标题可直接跳转阅读 -- 点击分类名称可进入分类首页 - -## 常见问题 - -### Q: 推送失败怎么办? - -检查以下几点: -1. 是否有仓库的写入权限 -2. 是否配置了正确的 SSH 或 Token -3. 网络连接是否正常 - -### Q: 如何取消部署? - -在 GitHub 仓库设置中删除 `gh-pages` 分支即可。 - -### Q: 自定义域名如何配置? - -在 `dist` 目录下创建 `CNAME` 文件,内容为你的域名: - -``` -your-domain.com -``` - -## 相关资源 - -- [GitHub Pages 官方文档](https://pages.github.com/) -- [VitePress 部署指南](https://vitepress.dev/guide/deploy) - ---- - -如有问题,欢迎提 Issue 讨论 💬