diff --git a/.github/workflows/deploy-pages.yml b/.github/workflows/deploy-pages.yml index 5a9bb43..8147b40 100644 --- a/.github/workflows/deploy-pages.yml +++ b/.github/workflows/deploy-pages.yml @@ -6,7 +6,7 @@ on: workflow_dispatch: permissions: - contents: read + contents: write pages: write id-token: write @@ -19,6 +19,42 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + cache-dependency-path: external/ai-research-ebook/package-lock.json + + - name: Install dependencies for research ebook + working-directory: external/ai-research-ebook + run: npm ci + + - name: Build research ebook with custom base path + working-directory: external/ai-research-ebook + env: + SITE_URL: https://adongwanai.github.io + BASE_PATH: /AgentGuide/research + GITHUB_USERNAME: adongwanai + GITHUB_REPO: AgentGuide + GITHUB_REPOSITORY_URL: https://github.com/adongwanai/AgentGuide + run: npm run build + + - name: Copy to research directory + run: | + rm -rf research + mkdir -p research + cp -r external/ai-research-ebook/dist/* research/ + + - name: Commit research directory if changed + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add research/ + git diff --quiet && git diff --staged --quiet || git commit -m "Auto-update research ebook" + git push || echo "No changes to push" + - uses: actions/upload-pages-artifact@v3 with: path: . @@ -31,4 +67,4 @@ jobs: needs: build steps: - id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 4e3ffbc..22c0dc9 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,8 @@ LICENSE CHANGELOG.md READY_TO_LAUNCH.md +# ai-research-ebook 构建产物和依赖 +external/ai-research-ebook/dist/ +external/ai-research-ebook/node_modules/ +external/ai-research-ebook/.astro/ + diff --git a/external/ai-research-ebook/.vscode/extensions.json b/external/ai-research-ebook/.vscode/extensions.json new file mode 100644 index 0000000..22a1505 --- /dev/null +++ b/external/ai-research-ebook/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": ["astro-build.astro-vscode"], + "unwantedRecommendations": [] +} diff --git a/external/ai-research-ebook/.vscode/launch.json b/external/ai-research-ebook/.vscode/launch.json new file mode 100644 index 0000000..d642209 --- /dev/null +++ b/external/ai-research-ebook/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "./node_modules/.bin/astro dev", + "name": "Development server", + "request": "launch", + "type": "node-terminal" + } + ] +} diff --git a/external/ai-research-ebook/README.md b/external/ai-research-ebook/README.md new file mode 100644 index 0000000..d5071be --- /dev/null +++ b/external/ai-research-ebook/README.md @@ -0,0 +1,92 @@ +# Vibe Research - AI 科研指南 + +> 从 Idea 到论文发表的完整 AI 科研工作流指南 + +[![Built with Starlight](https://astro.badg.es/v2/built-with-starlight/tiny.svg)](https://starlight.astro.build) +[![Deploy to GitHub Pages](https://github.com/yiweinanzi/ai-research-ebook/workflows/Deploy%20to%20GitHub%20Pages/badge.svg)](https://github.com/yiweinanzi/ai-research-ebook/actions) + +## 简介 + +本书是一份面向 AI 研究者的实用指南,使用 **Astro + Starlight** 构建,涵盖了从 idea 生成到论文发表的完整工作流程。 + +## 在线阅读 + +📖 **默认地址:`https://yiweinanzi.github.io/ai-research-ebook`** + +你也可以通过环境变量覆盖站点地址(无需改代码): + +```bash +GITHUB_USERNAME=<你的用户名> npm run build +``` + +## 本地开发 + +```bash +# 安装依赖 +npm install + +# 启动开发服务器 +npm run dev + +# 构建生产版本 +npm run build + +# 预览构建结果 +npm run preview +``` + +## 部署前配置 + +`astro.config.mjs` 已支持环境变量配置: + +- `GITHUB_USERNAME`:GitHub 用户名(默认 `yiweinanzi`) +- `GITHUB_REPO`:仓库名(默认 `ai-research-ebook`) +- `SITE_URL`:站点域名(默认 `https://.github.io`) +- `BASE_PATH`:子路径(默认 `/`) +- `GITHUB_REPOSITORY_URL`:仓库完整 URL + +示例: + +```bash +GITHUB_USERNAME=<你的用户名> GITHUB_REPO=ai-research-ebook npm run build +``` + +## 内容大纲 + +- **1. Idea 生成**: 系统化的文献调研方法,使用多模型交叉验证 +- **2. 代码实现**: Claude Code、GPT-5.2、多Agent框架的最佳实践 +- **3. 论文图表**: 自动化绘图工具推荐,专业图表设计规范 +- **4. 论文写作**: 论证链构建方法,多模型协作写作 +- **5. 审稿与 Rebuttal**: 结构化审稿流水线,Rebuttal 写作策略 +- **6. 工具生态**: Elicit、Zotero-MCP 等最新工具,构建完整科研工具链 + +## 技术栈 + +- [Astro](https://astro.build) - 现代静态站点生成器 +- [Starlight](https://starlight.astro.build) - Astro 的文档主题 +- [GitHub Pages](https://pages.github.com) - 免费静态托管 +- [GitHub Actions](https://github.com/features/actions) - 自动部署 + +## 项目结构 + +``` +. +├── public/ +│ └── logo.svg +├── src/ +│ ├── content/ +│ │ └── docs/ # Markdown 内容文件 +│ ├── styles/ +│ │ └── custom.css # 自定义样式 +│ └── content.config.ts +├── astro.config.mjs +└── package.json +``` + +## 许可证 + +MIT License + +--- + +最后更新: 2026年2月9日 diff --git a/external/ai-research-ebook/astro.config.mjs b/external/ai-research-ebook/astro.config.mjs new file mode 100644 index 0000000..74bf0ec --- /dev/null +++ b/external/ai-research-ebook/astro.config.mjs @@ -0,0 +1,106 @@ +// @ts-check +import { defineConfig } from 'astro/config'; +import starlight from '@astrojs/starlight'; + +const repoName = process.env.GITHUB_REPO ?? 'ai-research-ebook'; +const githubUsername = process.env.GITHUB_USERNAME ?? 'yiweinanzi'; +const siteUrl = process.env.SITE_URL ?? `https://${githubUsername}.github.io`; +const basePath = process.env.BASE_PATH ?? `/${repoName}`; +const normalizedBasePath = basePath === '/' ? '' : basePath; +const mermaidScriptVersion = process.env.MERMAID_SCRIPT_VERSION ?? '20260209e'; +const repositoryUrl = + process.env.GITHUB_REPOSITORY_URL ?? `https://github.com/${githubUsername}/${repoName}`; + +// https://astro.build/config +export default defineConfig({ + site: siteUrl, + base: basePath, + integrations: [ + starlight({ + title: 'Vibe Research - AI 科研指南', + description: 'AI研究电子书 - 从idea到论文的完整指南', + head: [ + { + tag: 'script', + content: + "(() => { try { const key = 'starlight-theme'; localStorage.setItem(key, 'light'); document.documentElement.dataset.theme = 'light'; } catch { document.documentElement.dataset.theme = 'light'; } })();", + }, + { + tag: 'script', + attrs: { + type: 'module', + src: `${normalizedBasePath}/scripts/mermaid-init.js?v=${mermaidScriptVersion}`, + }, + }, + ], + logo: { + src: './src/assets/logo.svg', + alt: 'Vibe Research', + }, + social: [{ icon: 'github', label: 'GitHub', href: repositoryUrl }], + sidebar: [ + { + label: '首页', + items: [{ label: '关于本书', slug: 'index' }], + }, + { + label: '1. Idea 生成', + items: [ + { label: '1.1 调研方法', slug: 'idea/research' }, + { label: '1.2 调研项目', slug: 'idea/projects' }, + ], + }, + { + label: '2. 代码实现', + items: [ + { label: '2.1 Claude Code', slug: 'code/claude' }, + { label: '2.2 GPT-5.2 系列', slug: 'code/gpt' }, + { label: '2.3 多Agent框架', slug: 'code/agents' }, + ], + }, + { + label: '3. 论文图表', + items: [ + { label: '3.1 自动化绘图工具', slug: 'figures/tools' }, + { label: '3.2 专业绘图对比', slug: 'figures/comparison' }, + { label: '3.3 图表设计规范', slug: 'figures/design' }, + ], + }, + { + label: '4. 论文写作', + items: [ + { label: '4.1 写作方法', slug: 'writing/methods' }, + { label: '4.2 Prism 编辑器', slug: 'writing/prism' }, + { label: '4.3 多模型协作', slug: 'writing/collaboration' }, + ], + }, + { + label: '5. 审稿与Rebuttal', + items: [ + { label: '5.1 结构化审稿', slug: 'review/structured' }, + { label: '5.2 会议审稿模板', slug: 'review/templates' }, + { label: '5.3 Rebuttal策略', slug: 'writing/rebuttal' }, + ], + }, + { + label: '6. 工具生态', + items: [ + { label: '6.1 工具总览', slug: 'tools/overview' }, + { label: '6.2 完整工作流', slug: 'tools/workflow' }, + ], + }, + { + label: '7. 资料库', + items: [ + { label: '7.1 科研圣经', slug: 'library/root-assets' }, + ], + }, + ], + customCss: ['./src/styles/custom.css'], + }), + ], + output: 'static', + build: { + format: 'directory', + }, +}); diff --git a/external/ai-research-ebook/package-lock.json b/external/ai-research-ebook/package-lock.json new file mode 100644 index 0000000..eef5036 --- /dev/null +++ b/external/ai-research-ebook/package-lock.json @@ -0,0 +1,6400 @@ +{ + "name": "ai-research-ebook", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ai-research-ebook", + "version": "0.0.1", + "dependencies": { + "@astrojs/starlight": "^0.37.6", + "astro": "^5.6.1", + "sharp": "^0.34.2" + } + }, + "node_modules/@astrojs/compiler": { + "version": "2.13.1", + "resolved": "https://registry.npmmirror.com/@astrojs/compiler/-/compiler-2.13.1.tgz", + "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.7.5", + "resolved": "https://registry.npmmirror.com/@astrojs/internal-helpers/-/internal-helpers-0.7.5.tgz", + "integrity": "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==", + "license": "MIT" + }, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.10", + "resolved": "https://registry.npmmirror.com/@astrojs/markdown-remark/-/markdown-remark-6.3.10.tgz", + "integrity": "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.5", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.19.0", + "smol-toml": "^1.5.2", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/mdx": { + "version": "4.3.13", + "resolved": "https://registry.npmmirror.com/@astrojs/mdx/-/mdx-4.3.13.tgz", + "integrity": "sha512-IHDHVKz0JfKBy3//52JSiyWv089b7GVSChIXLrlUOoTLWowG3wr2/8hkaEgEyd/vysvNQvGk+QhysXpJW5ve6Q==", + "license": "MIT", + "dependencies": { + "@astrojs/markdown-remark": "6.3.10", + "@mdx-js/mdx": "^3.1.1", + "acorn": "^8.15.0", + "es-module-lexer": "^1.7.0", + "estree-util-visit": "^2.0.0", + "hast-util-to-html": "^9.0.5", + "piccolore": "^0.1.3", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1", + "remark-smartypants": "^3.0.2", + "source-map": "^0.7.6", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.3" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + }, + "peerDependencies": { + "astro": "^5.0.0" + } + }, + "node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.7.0", + "resolved": "https://registry.npmmirror.com/@astrojs/sitemap/-/sitemap-3.7.0.tgz", + "integrity": "sha512-+qxjUrz6Jcgh+D5VE1gKUJTA3pSthuPHe6Ao5JCxok794Lewx8hBFaWHtOnN0ntb2lfOf7gvOi9TefUswQ/ZVA==", + "license": "MIT", + "dependencies": { + "sitemap": "^8.0.2", + "stream-replace-string": "^2.0.0", + "zod": "^3.25.76" + } + }, + "node_modules/@astrojs/starlight": { + "version": "0.37.6", + "resolved": "https://registry.npmmirror.com/@astrojs/starlight/-/starlight-0.37.6.tgz", + "integrity": "sha512-wQrKwH431q+8FsLBnNQeG+R36TMtEGxTQ2AuiVpcx9APcazvL3n7wVW8mMmYyxX0POjTnxlcWPkdMGR3Yj1L+w==", + "license": "MIT", + "dependencies": { + "@astrojs/markdown-remark": "^6.3.1", + "@astrojs/mdx": "^4.2.3", + "@astrojs/sitemap": "^3.3.0", + "@pagefind/default-ui": "^1.3.0", + "@types/hast": "^3.0.4", + "@types/js-yaml": "^4.0.9", + "@types/mdast": "^4.0.4", + "astro-expressive-code": "^0.41.1", + "bcp-47": "^2.1.0", + "hast-util-from-html": "^2.0.1", + "hast-util-select": "^6.0.2", + "hast-util-to-string": "^3.0.0", + "hastscript": "^9.0.0", + "i18next": "^23.11.5", + "js-yaml": "^4.1.0", + "klona": "^2.0.6", + "magic-string": "^0.30.17", + "mdast-util-directive": "^3.0.0", + "mdast-util-to-markdown": "^2.1.0", + "mdast-util-to-string": "^4.0.0", + "pagefind": "^1.3.0", + "rehype": "^13.0.1", + "rehype-format": "^5.0.0", + "remark-directive": "^3.0.0", + "ultrahtml": "^1.6.0", + "unified": "^11.0.5", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.2" + }, + "peerDependencies": { + "astro": "^5.5.0" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@capsizecss/unpack/-/unpack-4.0.0.tgz", + "integrity": "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", + "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@expressive-code/core": { + "version": "0.41.6", + "resolved": "https://registry.npmmirror.com/@expressive-code/core/-/core-0.41.6.tgz", + "integrity": "sha512-FvJQP+hG0jWi/FLBSmvHInDqWR7jNANp9PUDjdMqSshHb0y7sxx3vHuoOr6SgXjWw+MGLqorZyPQ0aAlHEok6g==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^4.0.4", + "hast-util-select": "^6.0.2", + "hast-util-to-html": "^9.0.1", + "hast-util-to-text": "^4.0.1", + "hastscript": "^9.0.0", + "postcss": "^8.4.38", + "postcss-nested": "^6.0.1", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.1" + } + }, + "node_modules/@expressive-code/plugin-frames": { + "version": "0.41.6", + "resolved": "https://registry.npmmirror.com/@expressive-code/plugin-frames/-/plugin-frames-0.41.6.tgz", + "integrity": "sha512-d+hkSYXIQot6fmYnOmWAM+7TNWRv/dhfjMsNq+mIZz8Tb4mPHOcgcfZeEM5dV9TDL0ioQNvtcqQNuzA1sRPjxg==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.6" + } + }, + "node_modules/@expressive-code/plugin-shiki": { + "version": "0.41.6", + "resolved": "https://registry.npmmirror.com/@expressive-code/plugin-shiki/-/plugin-shiki-0.41.6.tgz", + "integrity": "sha512-Y6zmKBmsIUtWTzdefqlzm/h9Zz0Rc4gNdt2GTIH7fhHH2I9+lDYCa27BDwuBhjqcos6uK81Aca9dLUC4wzN+ng==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.6", + "shiki": "^3.2.2" + } + }, + "node_modules/@expressive-code/plugin-text-markers": { + "version": "0.41.6", + "resolved": "https://registry.npmmirror.com/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.41.6.tgz", + "integrity": "sha512-PBFa1wGyYzRExMDzBmAWC6/kdfG1oLn4pLpBeTfIRrALPjcGA/59HP3e7q9J0Smk4pC7U+lWkA2LHR8FYV8U7Q==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.6" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@pagefind/darwin-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@pagefind/darwin-arm64/-/darwin-arm64-1.4.0.tgz", + "integrity": "sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/darwin-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@pagefind/darwin-x64/-/darwin-x64-1.4.0.tgz", + "integrity": "sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/default-ui": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@pagefind/default-ui/-/default-ui-1.4.0.tgz", + "integrity": "sha512-wie82VWn3cnGEdIjh4YwNESyS1G6vRHwL6cNjy9CFgNnWW/PGRjsLq300xjVH5sfPFK3iK36UxvIBymtQIEiSQ==", + "license": "MIT" + }, + "node_modules/@pagefind/freebsd-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@pagefind/freebsd-x64/-/freebsd-x64-1.4.0.tgz", + "integrity": "sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@pagefind/linux-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@pagefind/linux-arm64/-/linux-arm64-1.4.0.tgz", + "integrity": "sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/linux-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@pagefind/linux-x64/-/linux-x64-1.4.0.tgz", + "integrity": "sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/windows-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@pagefind/windows-x64/-/windows-x64-1.4.0.tgz", + "integrity": "sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "3.22.0", + "resolved": "https://registry.npmmirror.com/@shikijs/core/-/core-3.22.0.tgz", + "integrity": "sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "3.22.0", + "resolved": "https://registry.npmmirror.com/@shikijs/engine-javascript/-/engine-javascript-3.22.0.tgz", + "integrity": "sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.22.0", + "resolved": "https://registry.npmmirror.com/@shikijs/engine-oniguruma/-/engine-oniguruma-3.22.0.tgz", + "integrity": "sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.22.0", + "resolved": "https://registry.npmmirror.com/@shikijs/langs/-/langs-3.22.0.tgz", + "integrity": "sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.22.0", + "resolved": "https://registry.npmmirror.com/@shikijs/themes/-/themes-3.22.0.tgz", + "integrity": "sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.22.0", + "resolved": "https://registry.npmmirror.com/@shikijs/types/-/types-3.22.0.tgz", + "integrity": "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmmirror.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmmirror.com/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmmirror.com/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmmirror.com/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "25.2.2", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-25.2.2.tgz", + "integrity": "sha512-BkmoP5/FhRYek5izySdkOneRyXYN35I860MFAGupTdebyE66uZaR+bXLHq8k4DirE5DwQi3NuhvRU1jqTVwUrQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/astro": { + "version": "5.17.1", + "resolved": "https://registry.npmmirror.com/astro/-/astro-5.17.1.tgz", + "integrity": "sha512-oD3tlxTaVWGq/Wfbqk6gxzVRz98xa/rYlpe+gU2jXJMSD01k6sEDL01ZlT8mVSYB/rMgnvIOfiQQ3BbLdN237A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@astrojs/compiler": "^2.13.0", + "@astrojs/internal-helpers": "0.7.5", + "@astrojs/markdown-remark": "6.3.10", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^4.0.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "acorn": "^8.15.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "boxen": "8.0.1", + "ci-info": "^4.3.1", + "clsx": "^2.1.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^1.1.1", + "cssesc": "^3.0.0", + "debug": "^4.4.3", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.6.2", + "diff": "^8.0.3", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^1.7.0", + "esbuild": "^0.25.0", + "estree-walker": "^3.0.3", + "flattie": "^1.1.1", + "fontace": "~0.4.0", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.1", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "p-limit": "^6.2.0", + "p-queue": "^8.1.1", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.3", + "prompts": "^2.4.2", + "rehype": "^13.0.2", + "semver": "^7.7.3", + "shiki": "^3.21.0", + "smol-toml": "^1.6.0", + "svgo": "^4.0.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tsconfck": "^3.1.6", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.3", + "unist-util-visit": "^5.0.0", + "unstorage": "^1.17.4", + "vfile": "^6.0.3", + "vite": "^6.4.1", + "vitefu": "^1.1.1", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^21.1.1", + "yocto-spinner": "^0.2.3", + "zod": "^3.25.76", + "zod-to-json-schema": "^3.25.1", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + } + }, + "node_modules/astro-expressive-code": { + "version": "0.41.6", + "resolved": "https://registry.npmmirror.com/astro-expressive-code/-/astro-expressive-code-0.41.6.tgz", + "integrity": "sha512-l47tb1uhmVIebHUkw+HEPtU/av0G4O8Q34g2cbkPvC7/e9ZhANcjUUciKt9Hp6gSVDdIuXBBLwJQn2LkeGMOAw==", + "license": "MIT", + "dependencies": { + "rehype-expressive-code": "^0.41.6" + }, + "peerDependencies": { + "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "license": "MIT" + }, + "node_modules/bcp-47": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/bcp-47/-/bcp-47-2.1.0.tgz", + "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "license": "ISC" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-selector-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/css-selector-parser/-/css-selector-parser-3.3.0.tgz", + "integrity": "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmmirror.com/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmmirror.com/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "license": "MIT", + "dependencies": { + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/devalue": { + "version": "5.6.2", + "resolved": "https://registry.npmmirror.com/devalue/-/devalue-5.6.2.tgz", + "integrity": "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmmirror.com/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/direction": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/direction/-/direction-2.0.1.tgz", + "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==", + "license": "MIT", + "bin": { + "direction": "cli.js" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmmirror.com/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/expressive-code": { + "version": "0.41.6", + "resolved": "https://registry.npmmirror.com/expressive-code/-/expressive-code-0.41.6.tgz", + "integrity": "sha512-W/5+IQbrpCIM5KGLjO35wlp1NCwDOOVQb+PAvzEoGkW1xjGM807ZGfBKptNWH6UECvt6qgmLyWolCMYKh7eQmA==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.6", + "@expressive-code/plugin-frames": "^0.41.6", + "@expressive-code/plugin-shiki": "^0.41.6", + "@expressive-code/plugin-text-markers": "^0.41.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/fontkitten/-/fontkitten-1.0.2.tgz", + "integrity": "sha512-piJxbLnkD9Xcyi7dWJRnqszEURixe7CrF/efBfbffe2DPyabmuIuqraruY8cXTs19QoM8VJzx47BDRVNXETM7Q==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/h3": { + "version": "1.15.5", + "resolved": "https://registry.npmmirror.com/h3/-/h3-1.15.5.tgz", + "integrity": "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.5", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hast-util-embedded": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz", + "integrity": "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-is-element": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-format": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/hast-util-format/-/hast-util-format-1.1.0.tgz", + "integrity": "sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-minify-whitespace": "^1.0.0", + "hast-util-phrasing": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "html-whitespace-sensitive-tag-names": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmmirror.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-has-property": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", + "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-body-ok-link": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.1.tgz", + "integrity": "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-minify-whitespace": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/hast-util-minify-whitespace/-/hast-util-minify-whitespace-1.0.1.tgz", + "integrity": "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-is-body-ok-link": "^3.0.0", + "hast-util-is-element": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-select": { + "version": "6.0.4", + "resolved": "https://registry.npmmirror.com/hast-util-select/-/hast-util-select-6.0.4.tgz", + "integrity": "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "bcp-47-match": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "css-selector-parser": "^3.0.0", + "devlop": "^1.0.0", + "direction": "^2.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "nth-check": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmmirror.com/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmmirror.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-whitespace-sensitive-tag-names": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-3.0.1.tgz", + "integrity": "sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/i18next": { + "version": "23.16.8", + "resolved": "https://registry.npmmirror.com/i18next/-/i18next-23.16.8.tgz", + "integrity": "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "11.2.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-11.2.5.tgz", + "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/magicast/-/magicast-0.5.2.tgz", + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-directive": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", + "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmmirror.com/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmmirror.com/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmmirror.com/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmmirror.com/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz", + "integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/pagefind": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/pagefind/-/pagefind-1.4.0.tgz", + "integrity": "sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==", + "license": "MIT", + "bin": { + "pagefind": "lib/runner/bin.cjs" + }, + "optionalDependencies": { + "@pagefind/darwin-arm64": "1.4.0", + "@pagefind/darwin-x64": "1.4.0", + "@pagefind/freebsd-x64": "1.4.0", + "@pagefind/linux-arm64": "1.4.0", + "@pagefind/linux-x64": "1.4.0", + "@pagefind/windows-x64": "1.4.0" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmmirror.com/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-expressive-code": { + "version": "0.41.6", + "resolved": "https://registry.npmmirror.com/rehype-expressive-code/-/rehype-expressive-code-0.41.6.tgz", + "integrity": "sha512-aBMX8kxPtjmDSFUdZlAWJkMvsQ4ZMASfee90JWIAV8tweltXLzkWC3q++43ToTelI8ac5iC0B3/S/Cl4Ql1y2g==", + "license": "MIT", + "dependencies": { + "expressive-code": "^0.41.6" + } + }, + "node_modules/rehype-format": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/rehype-format/-/rehype-format-5.0.1.tgz", + "integrity": "sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-format": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmmirror.com/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-directive": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/remark-directive/-/remark-directive-3.0.1.tgz", + "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmmirror.com/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmmirror.com/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmmirror.com/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rollup": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/shiki": { + "version": "3.22.0", + "resolved": "https://registry.npmmirror.com/shiki/-/shiki-3.22.0.tgz", + "integrity": "sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.22.0", + "@shikijs/engine-javascript": "3.22.0", + "@shikijs/engine-oniguruma": "3.22.0", + "@shikijs/langs": "3.22.0", + "@shikijs/themes": "3.22.0", + "@shikijs/types": "3.22.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "8.0.2", + "resolved": "https://registry.npmmirror.com/sitemap/-/sitemap-8.0.2.tgz", + "integrity": "sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.4.1" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/smol-toml": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/smol-toml/-/smol-toml-1.6.0.tgz", + "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmmirror.com/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmmirror.com/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmmirror.com/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.3", + "resolved": "https://registry.npmmirror.com/unifont/-/unifont-0.7.3.tgz", + "integrity": "sha512-b0GtQzKCyuSHGsfj5vyN8st7muZ6VCI4XD4vFlr7Uy1rlWVYxC3npnfk8MyreHxJYrz1ooLDqDzFe9XqQTlAhA==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.4", + "resolved": "https://registry.npmmirror.com/unstorage/-/unstorage-1.17.4.tgz", + "integrity": "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.5", + "lru-cache": "^11.2.0", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "6.4.1", + "resolved": "https://registry.npmmirror.com/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "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 + } + } + }, + "node_modules/vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-spinner": { + "version": "0.2.3", + "resolved": "https://registry.npmmirror.com/yocto-spinner/-/yocto-spinner-0.2.3.tgz", + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmmirror.com/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmmirror.com/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + }, + "node_modules/zod-to-ts": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/zod-to-ts/-/zod-to-ts-1.2.0.tgz", + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "peerDependencies": { + "typescript": "^4.9.4 || ^5.0.2", + "zod": "^3" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/external/ai-research-ebook/package.json b/external/ai-research-ebook/package.json new file mode 100644 index 0000000..cef56b2 --- /dev/null +++ b/external/ai-research-ebook/package.json @@ -0,0 +1,17 @@ +{ + "name": "ai-research-ebook", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/starlight": "^0.37.6", + "astro": "^5.6.1", + "sharp": "^0.34.2" + } +} \ No newline at end of file diff --git a/external/ai-research-ebook/public/favicon.svg b/external/ai-research-ebook/public/favicon.svg new file mode 100644 index 0000000..cba5ac1 --- /dev/null +++ b/external/ai-research-ebook/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/external/ai-research-ebook/public/logo.svg b/external/ai-research-ebook/public/logo.svg new file mode 100644 index 0000000..802ca61 --- /dev/null +++ b/external/ai-research-ebook/public/logo.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/external/ai-research-ebook/public/scripts/mermaid-init.js b/external/ai-research-ebook/public/scripts/mermaid-init.js new file mode 100644 index 0000000..c6cbf3c --- /dev/null +++ b/external/ai-research-ebook/public/scripts/mermaid-init.js @@ -0,0 +1,248 @@ +// Mermaid initialization for Starlight + Expressive Code +(function () { + 'use strict'; + + const SCRIPT_VERSION = '20260209e'; + const SOURCE_SELECTOR = '.sl-markdown-content pre[data-language="mermaid"]'; + const RENDER_CLASS = 'mermaid-diagram'; + const HIDDEN_CLASS = 'mermaid-source-hidden'; + const THEME_OBSERVER_FLAG = '__vrMermaidThemeObserver'; + let mermaidModule = null; + let isRendering = false; + let needsRerender = false; + + function isDarkTheme() { + return document.documentElement.dataset.theme === 'dark'; + } + + function getSourceRoot(block) { + return block.closest('.expressive-code') || block; + } + + function normalizeMermaidCode(rawText) { + return String(rawText || '') + .replace(/\u007f/g, '\n') + .replace(/\u001f/g, '\n') + .replace(/[\u2028\u2029]/g, '\n') + .replace(/\u00a0/g, ' ') + .replace(/\r\n?/g, '\n') + .replace(/[\u200B-\u200D\uFEFF]/g, '') + .replace(/[\x00-\x08\x0B\x0C\x0E-\x1E]/g, '') + .split('\n') + .map((line) => line.replace(/\s+$/g, '')) + .join('\n') + .trim(); + } + + function fixLegacySubgraphSyntax(code) { + let autoSubgraphId = 0; + const lines = code.split('\n').map((line) => { + const legacyParen = line.match(/^(\s*)subgraph\s+([A-Za-z_][\w-]*)\s+\((.+)\)\s*$/); + if (legacyParen) { + const [, indent, id, title] = legacyParen; + return `${indent}subgraph ${id}["${String(title).replace(/"/g, '\\"')}"]`; + } + + const bracketOnly = line.match(/^(\s*)subgraph\s+\[(.+)\]\s*$/); + if (bracketOnly) { + autoSubgraphId += 1; + const [, indent, rawTitle] = bracketOnly; + const trimmed = String(rawTitle).trim(); + const title = /^".*"$/.test(trimmed) ? trimmed : `"${trimmed.replace(/"/g, '\\"')}"`; + return `${indent}subgraph SG_AUTO_${autoSubgraphId}[${title}]`; + } + + const quoteOnly = line.match(/^(\s*)subgraph\s+"(.+)"\s*$/); + if (quoteOnly) { + autoSubgraphId += 1; + const [, indent, title] = quoteOnly; + return `${indent}subgraph SG_AUTO_${autoSubgraphId}["${String(title).replace(/"/g, '\\"')}"]`; + } + + return line; + }); + + return lines + .join('\n') + .replace(/subgraph\s+([A-Za-z_][\w-]*)\s+\(([^\n\)]*)\)/g, (_, id, title) => { + return `subgraph ${id}["${String(title).replace(/"/g, '\\"')}"]`; + }); + } + + function finalizeMermaidCode(rawText) { + const normalized = normalizeMermaidCode(rawText); + return fixLegacySubgraphSyntax(normalized); + } + + function getCodeFromEcLines(block) { + const lineNodes = block.querySelectorAll('.ec-line .code'); + if (!lineNodes.length) return ''; + return Array.from(lineNodes) + .map((node) => node.textContent || '') + .join('\n'); + } + + function getCodeFromCopyButton(block) { + const button = block.closest('.expressive-code')?.querySelector('.copy button[data-code]'); + return button?.dataset.code || ''; + } + + function extractMermaidSource(block) { + const fromEcLines = getCodeFromEcLines(block); + if (fromEcLines.trim()) return finalizeMermaidCode(fromEcLines); + + const fromCopy = getCodeFromCopyButton(block); + if (fromCopy.trim()) return finalizeMermaidCode(fromCopy); + + const codeNode = block.querySelector('code'); + const fallback = codeNode ? codeNode.textContent || codeNode.innerText || '' : ''; + return finalizeMermaidCode(fallback); + } + + function cleanupRenderedDiagrams() { + document.querySelectorAll(`.${RENDER_CLASS}[data-vr-mermaid="true"]`).forEach((node) => node.remove()); + document.querySelectorAll(SOURCE_SELECTOR).forEach((block) => { + const root = getSourceRoot(block); + root.classList.remove(HIDDEN_CLASS); + root.style.display = ''; + block.removeAttribute('data-vr-mermaid-rendered'); + }); + } + + function buildErrorFallback(message, source) { + const wrapper = document.createElement('div'); + wrapper.className = RENDER_CLASS; + wrapper.dataset.vrMermaid = 'true'; + wrapper.style.borderColor = 'rgba(239, 68, 68, 0.45)'; + + const title = document.createElement('div'); + title.textContent = `[mermaid] render failed: ${message}`; + title.style.cssText = 'color:#b91c1c;font-weight:600;margin-bottom:8px;'; + wrapper.appendChild(title); + + const pre = document.createElement('pre'); + pre.textContent = source; + pre.style.cssText = 'white-space:pre-wrap;word-break:break-word;max-height:320px;overflow:auto;margin:0;'; + wrapper.appendChild(pre); + + return wrapper; + } + + async function ensureMermaid() { + if (mermaidModule) return mermaidModule; + const mod = await import('https://cdn.jsdelivr.net/npm/mermaid@10.9.1/dist/mermaid.esm.min.mjs'); + mermaidModule = mod.default || mod; + return mermaidModule; + } + + async function doRender() { + console.log('[mermaid] init script', SCRIPT_VERSION); + const mermaid = await ensureMermaid(); + mermaid.initialize({ + startOnLoad: false, + securityLevel: 'loose', + theme: isDarkTheme() ? 'dark' : 'base', + }); + + cleanupRenderedDiagrams(); + const blocks = Array.from(document.querySelectorAll(SOURCE_SELECTOR)); + if (!blocks.length) return; + + console.log('[mermaid] Found', blocks.length, 'diagrams'); + + let ok = 0; + let failed = 0; + for (let index = 0; index < blocks.length; index += 1) { + const block = blocks[index]; + const sourceRoot = getSourceRoot(block); + const source = extractMermaidSource(block); + if (!source) continue; + + const wrapper = document.createElement('div'); + wrapper.className = RENDER_CLASS; + wrapper.dataset.vrMermaid = 'true'; + + const host = document.createElement('div'); + host.className = 'mermaid'; + host.textContent = source; + wrapper.appendChild(host); + sourceRoot.insertAdjacentElement('afterend', wrapper); + + try { + await mermaid.run({ nodes: [host] }); + sourceRoot.classList.add(HIDDEN_CLASS); + sourceRoot.style.display = 'none'; + block.dataset.vrMermaidRendered = 'true'; + ok += 1; + } catch (error) { + wrapper.remove(); + sourceRoot.classList.remove(HIDDEN_CLASS); + sourceRoot.style.display = ''; + const fallback = buildErrorFallback(error?.message || String(error), source); + sourceRoot.insertAdjacentElement('afterend', fallback); + console.warn(`[mermaid] Diagram ${index + 1} render failed:`, error?.message || error); + failed += 1; + } + } + + console.log('[mermaid] render done:', { ok, failed, total: blocks.length }); + } + + async function renderAllDiagrams() { + if (isRendering) { + needsRerender = true; + return; + } + + isRendering = true; + try { + do { + needsRerender = false; + await doRender(); + } while (needsRerender); + } catch (error) { + console.error('[mermaid] Load failed:', error); + } finally { + isRendering = false; + } + } + + function observeThemeChanges() { + if (window[THEME_OBSERVER_FLAG]) return; + + let themeTimer = null; + const observer = new MutationObserver((mutations) => { + for (const mutation of mutations) { + if (mutation.type === 'attributes' && mutation.attributeName === 'data-theme') { + if (themeTimer) clearTimeout(themeTimer); + themeTimer = setTimeout(() => { + renderAllDiagrams(); + }, 80); + break; + } + } + }); + + observer.observe(document.documentElement, { + attributes: true, + attributeFilter: ['data-theme'], + }); + + window[THEME_OBSERVER_FLAG] = observer; + } + + function bootMermaid() { + renderAllDiagrams(); + observeThemeChanges(); + } + + document.addEventListener('astro:after-swap', bootMermaid); + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', bootMermaid, { once: true }); + } else { + bootMermaid(); + } + + window.renderMermaidDiagrams = renderAllDiagrams; +})(); diff --git a/external/ai-research-ebook/src/assets/houston.webp b/external/ai-research-ebook/src/assets/houston.webp new file mode 100644 index 0000000..930c164 Binary files /dev/null and b/external/ai-research-ebook/src/assets/houston.webp differ diff --git a/external/ai-research-ebook/src/assets/logo.svg b/external/ai-research-ebook/src/assets/logo.svg new file mode 100644 index 0000000..802ca61 --- /dev/null +++ b/external/ai-research-ebook/src/assets/logo.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/external/ai-research-ebook/src/content.config.ts b/external/ai-research-ebook/src/content.config.ts new file mode 100644 index 0000000..d9ee8c9 --- /dev/null +++ b/external/ai-research-ebook/src/content.config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; +import { docsLoader } from '@astrojs/starlight/loaders'; +import { docsSchema } from '@astrojs/starlight/schema'; + +export const collections = { + docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }), +}; diff --git a/external/ai-research-ebook/src/content/docs/code/agents.mdx b/external/ai-research-ebook/src/content/docs/code/agents.mdx new file mode 100644 index 0000000..fd20acc --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/code/agents.mdx @@ -0,0 +1,609 @@ +--- +title: 多Agent框架 +description: LangChain、LlamaIndex、CrewAI、AutoGen 等多Agent框架对比 +sidebar: + order: 3 +--- + +import { Card, CardGrid } from '@astrojs/starlight/components'; + +## 1. 框架对比概览 + +当研究任务需要多个Agent协作时,选择合适的框架: + +| 框架 | 核心优势 | 研究用途 | GitHub | +|------|---------|---------|--------| +| **LangChain/LangGraph** | 复杂推理工作流,状态管理 | 多步骤文献分析、实验设计 | [langchain-ai](https://github.com/langchain-ai) | +| **LlamaIndex** | 知识库集成,RAG 优化 | 文档密集型研究、论文库查询 | [run-llama](https://github.com/run-llama) | +| **CrewAI** | 角色定义清晰,企业级 | 协作研究项目、团队模拟 | [crewAIInc](https://github.com/crewAIInc) | +| **Microsoft AutoGen** | 对话优先框架 | 讨论式研究、辩论式分析 | [microsoft/autogen](https://github.com/microsoft/autogen) | + +--- + +## 2. 选择决策树 + +```mermaid +flowchart TD + A(任务类型) --> B{需要复杂工作流?} + A --> C{需要知识库/RAG?} + A --> D{需要角色扮演?} + A --> E{需要并行协作?} + + B -->|是| F[LangGraph] + B -->|否| G[简单顺序执行] + + C -->|是| H[LlamaIndex] + D -->|是| I[CrewAI] + E -->|是| J[Agent Teams] +``` + +--- + +## 3. Claude Agent Teams + +### 3.1 核心能力 + +Agent Teams 让多个 Claude Code 会话并行协作: + +| 特性 | 说明 | +|------|------| +| **Team lead** | 负责拆解任务、分派、汇总 | +| **Teammates** | 独立执行,各自有上下文窗口 | +| **Delegate mode** | 队长只调度不实现,队友执行 | + +### 3.2 两种展示方式 + +| 模式 | 说明 | +|------|------| +| **In-process** | 都在同一个终端里跑(无需额外配置) | +| **Split panes** | 每个队友一个 pane(需要 tmux 或 iTerm2) | + +### 3.3 Agent Teams 四步法 + +1. **队长会话(Lead)先进入 Plan/Delegate**:先拆任务,不急着写代码 +2. 把任务拆成:可并行、低耦合、验收明确的子任务 +3. 每个子任务指定:输入、输出、验收(DoD) +4. 队友完成后,Lead 做集成、跑全套测试、开 PR + +### 3.4 Claude Code SDK 实战 + +```python +from claude_code import ClaudeAgent, TaskResult + +# 创建并行任务 +agents = [ + ClaudeAgent(name="Architect", role="架构设计"), + ClaudeAgent(name="Implementer", role="核心实现"), + ClaudeAgent(name="Tester", role="测试验证"), +] + +# 并行执行 +results = agent_team.run_parallel(agents, task="实现特征提取模块") +``` + +--- + +## 4. LangGraph 实战:科研状态机 + +```python +from typing import TypedDict, List, Optional +from langgraph.graph import StateGraph, END + +class ResearchState(TypedDict): + """研究流水线状态""" + topic: str # 研究主题 + papers: List[dict] # 论文列表 + analysis: str # 当前分析 + gaps: List[str] # 识别到的空白 + claims: List[str] # 候选主张 + evaluation: str # 评估结果 + +def search_papers(state: ResearchState) -> ResearchState: + """搜索相关论文""" + papers = elicit_search(state["topic"]) + return {"papers": papers} + +def analyze_papers(state: ResearchState) -> ResearchState: + """分析论文,提取关键信息""" + analysis = claude_analyze(state["papers"]) + return {"analysis": analysis} + +def extract_gaps(state: ResearchState) -> ResearchState: + """从分析中提取研究空白""" + gaps = identify_gaps(state["analysis"]) + return {"gaps": gaps} + +def generate_claims(state: ResearchState) -> ResearchState: + """基于空白生成可验证主张""" + claims = [] + for gap in state["gaps"]: + claim = formulate_claim(gap) + claims.append(claim) + return {"claims": claims} + +def evaluate_claims(state: ResearchState) -> ResearchState: + """评估主张质量""" + evaluation = gpt5_evaluate(state["claims"]) + return {"evaluation": evaluation} + +# 构建工作流 +workflow = StateGraph(ResearchState) +workflow.add_node("search", search_papers) +workflow.add_node("analyze", analyze_papers) +workflow.add_node("extract_gaps", extract_gaps) +workflow.add_node("generate_claims", generate_claims) +workflow.add_node("evaluate", evaluate_claims) + +# 定义边 +workflow.add_edge("search", "analyze") +workflow.add_edge("analyze", "extract_gaps") +workflow.add_edge("extract_gaps", "generate_claims") +workflow.add_edge("generate_claims", "evaluate") +workflow.add_edge("evaluate", END) + +app = workflow.compile() +``` + +--- + +## 5. CrewAI 研究团队配置 + +```python +from crewai import Agent, Task, Crew, Process + +# 1. 定义专业角色 +literature_reviewer = Agent( + role="文献综述专家", + goal="全面梳理指定领域的研究现状", + backstory="你是一位经验丰富的研究员,拥有10年AI领域研究经验。", + tools=[elicit_tool, semantic_scholar_tool], + verbose=True +) + +gap_analyst = Agent( + role="研究空白分析师", + goal="从现有研究中识别可探索的空白", + backstory="你擅长发现被忽视的研究方向。", + tools=[claude_tool], + verbose=True +) + +claim_validator = Agent( + role="主张验证专家", + goal="评估研究主张的可验证性和创新性", + backstory="你严格审查每一个科学主张。", + tools=[gpt_tool], + verbose=True +) + +# 2. 定义任务 +task_review = Task( + description="调研 {topic} 领域近3年的顶会论文,产出:1)研究地图;2)主流方法对比表;3)潜在空白清单", + expected_output="结构化的研究综述文档", + agent=literature_reviewer +) + +task_gap = Task( + description="基于文献综述,识别 {topic} 领域最值得探索的5个研究方向", + expected_output="研究空白分析报告", + agent=gap_analyst +) + +task_claim = Task( + description="将每个研究空白转化为可验证的科研主张", + expected_output="主张清单及详细说明", + agent=claim_validator +) + +# 3. 组建团队 +research_crew = Crew( + agents=[literature_reviewer, gap_analyst, claim_validator], + tasks=[task_review, task_gap, task_claim], + process=Process.sequential, + verbose=True, + memory=True +) + +result = research_crew.kickoff(inputs={"topic": "多模态学习"}) +``` + +--- + +## 6. AutoGen 对话式研究 + +```python +import autogen + +# 定义对话Agent +critic = autogen.AssistantAgent( + name="Critic", + system_message="""你是审稿人Agent,负责批判性分析。 + 质疑假设、找出漏洞、提出改进建议。 + 每次发言必须提出至少一个建设性批评。""" +) + +author = autogen.AssistantAgent( + name="Author", + system_message="""你是作者Agent,负责辩护和解释你的研究。 + 回应批评,补充论据,完善论点。""" +) + +# 启动对话 +critic.initiate_chat( + author, + message="请简要介绍你的研究主张,然后我会提出质疑。" +) +``` + +--- + +## 7. Ralph 循环:简单而强大的自治模式 + +### 7.1 核心原理 + +Ralph 循环通过简单的 bash 循环重复执行操作,直到任务成功: + +```bash +#!/usr/bin/env bash +set -euo pipefail + +MAX_ITERS="${MAX_ITERS:-25}" + +for i in $(seq 1 "$MAX_ITERS"); do + echo "=== Iteration $i/$MAX_ITERS ===" + cat PROMPT.md | claude -p "按PROMPT.md完成任务。必须跑 tests;失败要修到通过。" + ./scripts/test-fast.sh && ./scripts/lint.sh +done + +echo "Reached MAX_ITERS=$MAX_ITERS without passing. Stop." +exit 1 +``` + +### 7.2 关键技巧 + +| 技巧 | 说明 | +|------|------| +| **明确完成标准** | 定义可验证的完成条件(测试通过、无错误) | +| **小迭代原则** | 每轮迭代只处理少量任务 | +| **反馈循环** | 集成自动化检查确保每轮结果有效 | +| **安全限制** | 设置迭代次数上限(20-50次) | + +### 7.3 适用场景 + +| 适合 | 不适合 | +|------|--------| +| 可量化、可验证的任务 | 探索性任务 | +| 重构、写测试、文档化 | 主观设计 | +| 补测试、修复 Bug | 安全敏感代码 | + +--- + +## 8. 实战案例:16 个 Claude 写 C 编译器 + +### 8.1 实验概览 + +- **目标**:让 16 个 Claude 并行开发一个能编译 Linux 内核的 C 编译器 +- **成果**:两周内,近 2000 次会话,$2 万成本,10 万行代码 +- **支持架构**:x86、ARM、RISC-V + +### 8.2 成功的关键 + +1. **极高质量的测试体系**:引入成熟测试集,CI 强制要求新提交不破坏功能 +2. **站在 AI 视角设计系统**: + - 简化测试输出,结构化日志便于 AI 检索 + - 提供 `--fast` 模式只运行 1%-10% 测试子集 +3. **确保任务可拆分**:让每个智能体修复独立测试用例 +4. **利用并行实现角色分工**:性能优化、代码重构、文档维护 + +--- + +## 9. Everything Claude Code 项目 + +### 9.1 项目概览 + +| 项目 | 说明 | +|------|------| +| **创建者** | Anthropic 黑客松冠军 Affaan Mustafa | +| **定位** | 完整配置集合,将 Claude 升级为"虚拟开发团队" | +| **GitHub** | [affaan-m/everything-claude-code](https://github.com/affaan-m/everything-claude-code) | + +### 9.2 核心组件 + +| 组件 | 功能 | +|------|------| +| **Agents** | 规划、代码审查、安全检测、TDD 指导 | +| **Skills** | 工作流和领域经验封装 | +| **Commands** | 快速执行预定义流程 | +| **Rules** | 开发规范、测试覆盖率要求 | +| **Hooks** | 提交前检查、console.log 检测 | +| **MCP** | 外部工具连接 | + +### 9.3 实战效果 + +| 指标 | 提升 | +|------|------| +| 功能实现速度 | 65% | +| 代码问题减少 | 75% | +| 测试覆盖率 | 82% | +| 会话切换减少 | 70% | + +--- + +## 10. 多终端并行配置 + +### 10.1 tmux 工作流 + +```bash +# 安装 tmux (macOS) +brew install tmux + +# 配置文件 ~/.tmux.conf +set -g mouse on +bind-key C-d set -g mouse on + +# 一键启动多 AI 模型 +./start-ai-agents.sh +``` + +### 10.2 多模型同步控制 + +| 快捷键 | 功能 | +|--------|------| +| `Ctrl+b D` | 切换同步模式 | +| `Ctrl+b X` | 退出多窗口模式 | + +### 10.3 适用场景 + +- **同时对比**:Claude、Codex、Gemini、OpenCode +- **并行实现**:多个 worktree 同时推进 +- **多视角评审**:一个实现、一个审查、一个测试 + +--- + +## 11. 使用建议 + + + + + +不要过度设计,Claude Code 单实例足够处理大多数代码任务。 + + + + + +需要复杂分支时使用 LangGraph 或 Agent Teams。 + + + + + +论文库查询优先考虑 LlamaIndex。 + + + + + +需要角色扮演时使用 CrewAI。 + + + + + +--- + +## 12. Execution-Grounded Agent 实战要点 + +为了让多 Agent 真正用于科研而不只是"写建议",建议采用 execution-grounded 架构: + +1. **Idea Agent**:提出可执行改动(不是抽象口号) +2. **Patch Agent**:输出可应用的代码 diff +3. **Executor Agent**:在标准环境中自动训练/评测(含 GPU 资源调度) +4. **Feedback Agent**:回收 Wandb/日志结果,驱动下一轮搜索 + +### 12.1 两类标准化环境 + +| 环境 | 典型配置 | +|------|---------| +| **Post-training** | GRPO + MATH | +| **Pre-training** | nanoGPT + FineWeb | + +这种环境化设计的价值: +- 可以批量并行比较 idea,不依赖主观判断 +- 可以把"创新性"转化为"可执行且可复验"的工程流程 +- 可以把失败样本积累为后续搜索的先验约束 + +--- + +## 13. AI Scientist 系列脉络(补充) + +为避免把自动化科研理解成“单一框架”,这里补一条系列演进视角(来自 `AI research.md`): + +| 路线 | 核心特点 | 对工程落地的启发 | +|------|---------|------------------| +| **AI Scientist (早期)** | 自动生成 idea 与初步实验 | 适合快速探索,但执行闭环较弱 | +| **Execution-Grounded 路线** | 强调 patch/run/feedback 闭环 | 更适合做真实迭代与可复现实验 | +| **Narrative 路线(Idea2Story)** | 从想法到完整论文叙事 | 适合写作联动与产出打磨 | + +实操建议:把三条路线合成“探索 → 执行 → 叙事”的分层流程,而不是把某一个框架当万能解。 + +--- + +## 14. Book 实战增补(逐篇并入) + +> 本节并入 3 篇与多 Agent 协作强相关的文章,统一为"何时用团队协作、如何控成本、如何防跑偏"的实操框架。 + +### 14.1 1) Agent Swarm(蜂群)实战:从单助手到数字团队 + +#### 14.1.1 核心机制(可落地) + +1. **共享任务列表**:统一看板,便于并行认领和状态同步。 +2. **消息邮箱系统**:队员间可直接通信,减少 Lead 中转瓶颈。 +3. **独立上下文**:每个 Agent 独立窗口,避免大任务互相污染。 + +#### 14.1.2 六种典型玩法(按成熟度) + +- 新手:提示词里显式要求“尽可能拆分并行 + 尽可能调用 skill”。 +- 进阶:主模型统筹,便宜模型执行(文档/测试等)做成本分层。 +- 复用:优先搜索社区 skill,找不到再降级到本地或通用流程。 +- 降返工:先计划、后评审、再执行,卡住就回到计划阶段。 +- 大项目:Lead-Member 架构,分角色并行交付。 +- 深水区:Hooks/动态路由/Subagent Fork 等做质量与成本精调。 + +#### 14.1.3 详细步骤(从 0 开始跑 Swarm) + +1. 先写任务卡:目标、范围、交付物、验收标准(四项缺一不可)。 +2. 指定 Lead 只做拆解与验收,不直接写核心实现代码。 +3. 把任务拆成并行子任务(每个子任务都要有独立输入输出)。 +4. 要求每个成员用统一汇报模板:完成项 / 风险 / 下一步。 +5. Lead 在每个里程碑做一次冲突检查(文件冲突、接口冲突、依赖冲突)。 +6. 最后统一跑集成验证,再回到主分支合并。 + +#### 14.1.4 文章细节补充(Swarm 六玩法模板) + +##### 玩法1:新手并行提示模板 + +```text +调用 Agent Swarm 执行任务:<任务描述> +要求: +1) 尽可能拆分并行子任务 +2) 优先使用已安装 skills +3) 每个子任务输出“结果+风险+下一步” +``` + +##### 玩法2:跨模型协作(成本分层) + +- 复杂架构/核心逻辑:强模型; +- 文档/测试/样板代码:低成本模型; +- 最终合并与验收:回到主模型统一把关。 + +##### 玩法3:社区 Skill 复用 + +1. 先搜索可用 skill; +2. 匹配则直接调用; +3. 无匹配再降级到通用流程。 + +##### 玩法4:计划+评审循环 + +1. 先产 Todo 与依赖; +2. 评审 agent 指出遗漏与风险; +3. 评审通过后才并行执行。 + +##### 玩法5:Lead-Member 组织结构 + +- Lead:任务拆解、里程碑验收; +- Members:按角色并行实现; +- 里程碑结束统一集成。 + +##### 玩法6:高级功能组合 + +- Hooks 做质量门禁; +- 动态模型路由控成本; +- Subagent Fork 隔离上下文污染。 + +#### 14.1.5 实战摘录 + +> Swarm 不是"更会聊天",而是"可协作的生产组织"。核心收益来自任务拆解质量,而不是 agent 数量。 + +### 14.2 2) Agent Teams 团战模式:并行收益与协调成本 + +#### 14.2.1 适用/不适用边界 + +| 任务类型 | 建议 | +|---|---| +| 研究审查、多假设调试、跨层联动 | 优先 Agent Teams | +| 顺序任务、同文件高冲突、强依赖链 | 优先单会话或 Subagent | + +#### 14.2.2 启用与操作要点 + +```json +{ + "env": { + "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" + } +} +``` + +- 启用后先定义:Lead 职责、队员分工、里程碑验收。 +- 明确要求:`Wait for teammates before proceeding`,避免 Lead 抢做。 +- 文件级分工防冲突:每个队员拥有独立文件集。 +- 控 token:团队规模与任务收益匹配,避免“并行过度”。 + +#### 14.2.3 详细步骤(Agent Teams 落地) + +1. 在 `settings.json` 打开 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`。 +2. 重启会话,确认团队模式已可用(可看到 team/teammates 指令反馈)。 +3. 创建团队时先给角色定义:Lead、Frontend、Backend、Test、Docs。 +4. 给每个角色分配**不重叠文件域**,防止写冲突。 +5. 执行中每 20~30 分钟做一次状态同步:完成/阻塞/待协作。 +6. 收尾时执行“等待队员完成”策略,再统一集成测试。 + +#### 14.2.4 文章细节补充(Teams 全流程) + +1. 升级到支持 Teams 的版本(必要时先执行更新命令)。 +2. 在 `settings.json` 注入实验开关并重启会话。 +3. 选择显示模式(同进程或分屏),确认可观察到每个成员状态。 +4. 指定成员角色与模型,给每个成员写明 DoD(Definition of Done)。 +5. 启用委托模式,Lead 不直接写实现。 +6. 执行阶段每轮只推进一个里程碑,防止团队漂移。 +7. 全部成员完成后再统一回归测试与文档收口。 + +#### 14.2.5 限制说明(实操前必读) + +- 每会话仅一个团队; +- 不支持嵌套团队; +- 进程内成员恢复能力有限; +- 分屏依赖终端能力(tmux/iTerm2 等)。 + +### 14.3 3) 进阶实战(Skills/Subagents/MCP 组合) + +#### 14.3.1 组合原则 + +- **Skill**:固化团队规则与复用流程(先描述触发条件,后写具体动作)。 +- **Subagent**:把高噪声探索外包,主上下文只保留摘要结论。 +- **MCP**:把外部系统接入同一会话,减少标签页切换与复制粘贴。 + +#### 14.3.2 Subagent 设计建议 + +- 明确 `description` 与输出格式,避免“回传整段上下文”。 +- 只给必要工具权限(只读审查与可写实现分离)。 +- 推荐链路:Explore → Implementer → Tester,主代理只做整合与决策。 + +#### 14.3.3 详细步骤(Subagents + MCP 组合) + +1. 先定义 Explore 输出格式:只返回“文件路径 + 关键结论 + 风险点”。 +2. Implementer 仅接收结构化输入,不接收原始长对话。 +3. Tester 固定执行同一套测试清单,结果以表格返回。 +4. 主代理整合三者输出后,再调用 MCP 写回 issue/文档系统。 +5. 若发现信息漂移,回滚到 Explore 结果重建链路,不在末端硬修。 + +#### 14.3.4 文章细节补充(命令级落地) + +```bash +# 查看可用 subagents +/agents + +# 查看 MCP 连接 +/mcp + +# 示例:添加 HTTP MCP(按实际服务替换) +claude mcp add --transport http notion https://mcp.notion.com/mcp +``` + +1. 先建只读 `security-reviewer`,限制到 Read/Grep/Glob。 +2. 再建可写 implementer,明确只改指定目录。 +3. 所有 subagent 返回统一格式:`summary / changed_files / risks`。 +4. MCP 只接入本任务必要服务,避免权限过大。 + +#### 14.3.5 MCP 使用建议 + +- 优先接入:GitHub、Slack、DB、文档系统。 +- 第三方连接器先做安全评估(权限、日志、凭证范围)。 +- 通过 `/mcp` 定期盘点已加载连接,避免“隐式工具漂移”。 + +#### 14.3.6 常见坑与处理 + +- **坑1:并行太多导致 token 爆涨** → 限制活跃队员数量,优先高价值并行。 +- **坑2:成员写同一文件互相覆盖** → 启动前做文件分区。 +- **坑3:Lead 抢做实现导致协作失效** → 明确 Lead 只做调度与验收。 +- **坑4:总结过长污染主上下文** → 强制摘要长度与格式。 diff --git a/external/ai-research-ebook/src/content/docs/code/claude.mdx b/external/ai-research-ebook/src/content/docs/code/claude.mdx new file mode 100644 index 0000000..3b1d546 --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/code/claude.mdx @@ -0,0 +1,684 @@ +--- +title: Claude Code +description: Claude Code 4.5/4.6 最佳实践,用于项目构建阶段 +sidebar: + order: 1 +--- + +## 1. Claude Opus 4.5/4.6 (2025年11月发布) + +### 1.1 核心能力 + +| 能力 | 数据 | 说明 | +|------|------|------| +| **SWE-bench Verified** | 80.9% | 领先业界的代码生成基准 | +| **上下文窗口** | 200K tokens | 64K token 输出限制 | +| **成本降低** | 67% | $5/$25 per million tokens | +| **tau2-bench-lite** | 88.9% | Agent 工具使用评估 | + +### 1.2 适用场景 + +Claude Code 适合项目的**构建阶段**,可以开两三个(甚至更多)并行推进。 + +目标:让执行文档里的任何**被真实跑通**,直到代码结构、实验入口、评测脚本都稳定。 + +--- + +## 2. 安装与快速上手 + +### 2.1 安装方式 + +```bash +# macOS / Linux / WSL +curl -fsSL https://claude.ai/install.sh | bash + +# Windows PowerShell +irm https://claude.ai/install.ps1 | iex + +# Windows CMD +curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd +``` + +### 2.2 启动方式 + +```bash +cd your-project +claude +``` + +首次会提示登录。([Claude Code](https://code.claude.com/docs/en/overview)) + +--- + +## 3. 交互模式与快捷键 + +### 3.1 核心快捷键 + +| 快捷键 | 功能 | +|--------|------| +| `?` | 显示当前环境可用快捷键 | +| `Esc Esc` | 回退/总结(rewind / summarize) | +| `Shift+Tab` | 切换模式(普通 ↔ Plan ↔ Auto-accept ↔ Delegate) | +| `Ctrl+B` | 把运行中的任务后台化 | +| `Ctrl+T` | 显示/隐藏任务列表 | +| `Option/Alt + P` | 切换模型 | +| `Shift+Enter` | 多行输入 | + +### 3.2 内置斜杠命令 + +| 命令 | 功能 | +|------|------| +| `/clear` | 清空对话 | +| `/context` | 看上下文占用 | +| `/export [filename]` | 导出对话 | +| `/resume [session]` | 恢复历史会话 | +| `/rename ` | 重命名会话 | +| `/plan` | 进入 plan mode | +| `/rewind` | 回退代码/对话或总结 | +| `/doctor` | 安装健康检查 | +| `/debug [desc]` | 读 debug log 排查 | +| `/config` | 打开设置界面 | +| `/status` | 状态页 | +| `/permissions` | 权限规则 | +| `/model` | 选模型 | +| `/mcp` | 管 MCP 连接 | +| `/tasks` | 背景任务管理 | + +--- + +## 4. 权限模式与安全边界 + +### 4.1 四种模式 + +| 模式 | 能力 | 适用场景 | +|------|------|---------| +| **default** | 先问再做 | 日常稳妥开发 | +| **acceptEdits** | 自动允许文件编辑 | 你在旁边盯着、改动明确 | +| **plan** | 只读分析+出计划 | 需求澄清、方案评审、审计 | +| **delegate** | 只做 team 管理 | Agent Teams 并行协作时 | + +按 `Shift+Tab` 循环切换。 + +### 4.2 权限配置建议 + +在 `.claude/settings.json` 中配置: + +```json +{ + "permissions": { + "allow": ["npm run test *", "Bash(git status)"], + "deny": [".env", "secrets/**", "Bash(curl *)"] + } +} +``` + +--- + +## 5. 上下文管理 + +### 5.1 核心原则 + +**上下文再大也会被填满,可控上下文 = 可控质量。** + +### 5.2 工具对比 + +| 命令 | 功能 | 何时用 | +|------|------|--------| +| `/context` | 看上下文占用 | 判断是否该清理了 | +| `/clear` | 清掉对话但保留项目状态 | 任务切换、对话混乱 | +| `/export` | 导出关键对话 | 交接、复盘、团队沉淀 | +| `Esc Esc` / `/rewind` | 回退到之前状态 | 跑偏时回到正确轨道 | + +### 5.3 /catchup Skill 模板 + +```markdown +--- +name: catchup +description: Rebuild context after /clear by reading repo state +--- + +1) 运行并总结: +- git status +- git diff --stat +- git diff +- git log -n 20 --oneline + +2) 优先阅读: +- CLAUDE.md +- README / docs/ +- TODO.md / PLAN.md(如存在) + +3) 输出三段: +A. 当前仓库状态 +B. 当前目标与待办(按优先级) +C. 风险点与建议的下一步命令 +``` + +--- + +## 6. 项目记忆:CLAUDE.md + +### 6.1 必须包含的内容 + +> **CLAUDE.md 是智能体的"宪法",应保持简洁、聚焦高频使用场景和关键约束。** + +| 类别 | 内容示例 | +|------|---------| +| **项目启动** | `npm run dev` / `python main.py` | +| **测试运行** | `pytest tests/` / `npm test` | +| **代码风格** | `ruff check .` / `prettier --write` | +| **代码约束** | 禁止读取 secrets、单测必写 | +| **常见坑** | 数据路径用 pathlib、随机种子固定 | + +### 6.2 模板示例 + +```markdown +# 项目约定 + +## 启动命令 +- 开发: `npm run dev` +- 测试: `npm test` +- 构建: `npm run build` + +## 代码风格 +- Python: ruff format + ruff check +- 命名: snake_case 函数, PascalCase 类 + +## 常见坑 +- 数据路径必须用 pathlib +- 随机种子固定为 42 +- batch_size 先从 32 开始 + +## Debug 流程 +1. 复现 bug +2. 最小化用例 +3. 定位问题 +4. 修复 +5. 加测试 +``` + +--- + +## 7. Plan Mode 优先闭环 + +### 7.1 何时必须先 Plan + +- 影响架构、鉴权、支付、数据结构、跨模块重构 +- 需要写/改测试策略 +- 希望"一次性正确实现" + +### 7.2 标准三段式提示 + +```text +你先进入 /plan。 +1) 用要点列出:目标、非目标、约束(性能/兼容/安全)、验收标准。 +2) 给出分步实现计划(每步产出什么、改哪些文件)。 +3) 列出风险与回滚方案。 +等我确认后再开始编码实现。 +``` + +--- + +## 8. 权限与沙箱 + +### 8.1 沙箱模式 + +运行 `/sandbox` 打开菜单选择沙箱模式。 + +**WSL2 依赖安装:** +```bash +# Ubuntu/Debian +sudo apt-get install bubblewrap socat + +# Fedora +sudo dnf install bubblewrap socat +``` + +### 8.2 企业护栏策略 + +- **轻量提醒**:发现 `console.log` / debug flag → 提醒但不阻断 +- **强拦截**:提交时如果 tests 未过 → 阻止并要求修复 + +--- + +## 9. Skills:可复用工作流 + +### 9.1 Skills 是什么 + +Skills 把最佳实践固化成可调用、可共享、可组合的流程,解决"重复指导困境"。 + +### 9.2 存放位置 + +| 位置 | 说明 | +|------|------| +| 项目内 `.claude/skills/` | 团队共享 | +| `~/.claude/skills/` | 个人全局 | +| 插件内 `/skills/` | 插件分发 | + +### 9.3 推荐技能模板 + +#### 9.3.1 `/plan` - 强制计划 + +```markdown +--- +name: plan +description: Create an implementation plan with acceptance criteria +--- + +输出必须包含: +1) Goals / Non-goals / Constraints +2) Acceptance criteria(给出可运行命令) +3) Step-by-step plan +4) Risks + rollback +除非用户明确批准,否则不要写代码。 +``` + +#### 9.3.2 `/code-review` - 代码审查 + +```markdown +--- +name: code-review +description: Review current changes with a production checklist +--- + +执行: +- git diff +- git diff --stat + +按以下结构输出: +1) Correctness(边界/错误处理) +2) Security(输入校验/鉴权) +3) Tests(覆盖、缺失用例) +4) Performance(热点、N+1) +5) Maintainability(复杂度、命名) +最后给出"必须改/建议改/可不改"三类结论。 +``` + +#### 9.3.3 `/tdd` - 测试驱动 + +```markdown +--- +name: tdd +description: Apply a TDD workflow +--- + +1) 先写失败测试(说明为什么失败) +2) 再最小实现让测试通过 +3) 再重构(保持测试通过) +每一步都给出运行的测试命令与结果摘要。 +``` + +#### 9.3.4 `/pr` - PR 准备 + +```markdown +--- +name: pr +description: Prepare a PR: summarize changes, run checks +--- + +执行并总结: +- git status +- git diff --stat +- lint/test/build 命令 + +输出: +1) PR Title(50字内) +2) Summary(要点) +3) Testing(跑了什么) +4) Risk/rollback +``` + +--- + +## 10. Hooks:事件驱动自动化 + +### 10.1 Hooks 能做什么 + +Hooks 在关键节点自动执行或拦截操作: + +- 在 Claude 调用工具前/后 +- 在提交 prompt 时 +- 在会话开始/结束 +- 在 compact/子任务结束 + +### 10.2 推荐落地类型 + +| Hook 类型 | 功能 | 优先级 | +|----------|------|--------| +| **格式化** | 改完文件后自动跑 formatter | 高 | +| **测试** | 关键模块改动后自动跑测试 | 高 | +| **危险拦截** | 检测到 `curl | bash` 阻止 | 中 | +| **PR 质量** | 提交前检查 TODO/敏感信息 | 中 | +| **SessionStart** | 启动时加载项目环境 | 中 | + +### 10.3 Hooks vs Skills 对比 + +- **Skills**:告诉它"按步骤做事"(流程化) +- **Hooks**:保证"在关键节点一定发生"(自动化 + 强制) + +--- + +## 11. MCP:外部工具接入 + +### 11.1 推荐场景 + +| 场景 | 推荐程度 | +|------|---------| +| 访问外部系统数据(Notion/Jira/GitHub/DB) | ✅ 强推荐 | +| 有状态工具(Playwright) | ⚠️ 谨慎 | +| 所有内部 API 包进 MCP | ❌ 避免 | + +### 11.2 添加 MCP Server + +```bash +# HTTP 方式(推荐) +claude mcp add --transport http notion https://mcp.notion.com/mcp + +# SSE 方式(已废弃) +claude mcp add --transport sse asana https://mcp.asana.com/sse + +# 查看列表 +claude mcp list +``` + +### 11.3 核心 MCP 工具 + +| 工具 | 功能 | 适用场景 | +|------|------|---------| +| **Zotero-MCP** | 直接访问本地 Zotero 文献库 | 文献管理、引用分析 | +| **Perplexity MCP** | Deep Research 模式 | 技术调研、综述写作 | +| **ClickHouse MCP** | 数据库集成 | 大数据分析 | +| **GitHub MCP** | 仓库操作 | 版本控制自动化 | + +--- + +## 12. 最佳实践:团队协作模式 + +### 12.1 角色分工 + +| 角色 | 职责 | Claude 实例数 | +|------|------|--------------| +| Architect | 总体结构与接口设计 | 1-2 | +| Implementer | 核心模块实现 | 2-3 | +| Tester | 测试用例与评测 | 1-2 | +| Reviewer | Code review 与边界检查 | 1-2 | + +### 12.2 7天落地路线 + +| 天数 | 任务 | +|------|------| +| Day 1 | 编写简洁的 `CLAUDE.md` | +| Day 2 | 添加底线 `rules`(安全、测试) | +| Day 3 | 落地核心命令 `/plan` | +| Day 4 | 落地命令 `/code-review` | +| Day 5 | 添加提醒型 Hooks | +| Day 6 | 添加一致性 Hooks | +| Day 7 | 引入 Subagents | + +--- + +## 13. 下一步行动 + +1. 在项目里跑一次 `/init`,生成并精简 `CLAUDE.md` +2. 新建 `.claude/skills/`,把常用 Skills 复制进去 +3. 开始复杂任务前:先 `/plan`,确认后再实现 +4. 跑偏就 `Esc Esc` → rewind +5. 想减少弹窗就 `/sandbox` +6. 需要并行就用 Agent Teams + +--- + +## 14. Vibe 实战并集补充(融合版) + +> 本节把 `vibe/Vibe.md`、`vibe/Vibe Working.md`、`vibe/VIbe2.md` 的重合观点去重后并入当前章节,只保留与工程落地直接相关的增量。 + +### 14.1 高频共识(去重后) + +1. **Plan 先行**:复杂任务默认 `/plan`,先给验收标准再改代码。 +2. **上下文治理**:高频使用 `/context` + `/clear` + `/rewind`,避免会话污染。 +3. **流程资产化**:把重复动作沉淀为 skills / hooks / agents,而不是靠临场提示词。 +4. **结果导向**:以“可运行 + 可测试 + 可评审(PR)”作为完成标准。 + +### 14.2 团队落地的最小闭环 + +- **Day 1-2**:整理 `CLAUDE.md` + `settings.json`(定义底线约束) +- **Day 3-4**:落地 `/plan`、`/code-review` 两个核心 skill +- **Day 5-7**:接入提醒型 hooks,再逐步升级到一致性/阻断型 hooks + +这条路线的目标是先稳定质量,再追求并行规模。 + +--- + +## 15. Book 实战增补(逐篇并入) + +> 本节将 `book/` 中 5 篇与 Claude Code 直接相关的文章,按"教程正文 + 实战摘录"方式并入本章,重点保留可执行方法与避坑经验。 + +### 15.1 1) 470万阅读实战心得:先思考,再动手 + +#### 15.1.1 教程化整合 + +- 复杂任务默认先进入 Plan Mode(双击 `Shift + Tab`),先定架构与验收标准再写代码。 +- `CLAUDE.md` 要短、具体、可执行:优先写项目特有约束,而非常识性说明。 +- 指令要同时包含"做什么 + 为什么":让模型在边界场景做出更稳判断。 +- 上下文不要用满才清理:20%~40% 已可能出现质量退化,建议任务级会话拆分。 +- 使用外部记忆文件(如 `plan.md`、`SCRATCHPAD.md`)承接跨会话进度。 + +#### 15.1.2 可执行清单 + +1. 每次复杂需求先写 5~10 行目标与非目标。 +2. 运行一次 `/plan` 或 Plan Mode 输出分步方案。 +3. 将重复纠错项沉淀到 `CLAUDE.md`(按 `#` 快捷更新)。 +4. 对话跑偏时使用 `/compact` → `/clear` → 粘贴关键上下文重启。 + +#### 15.1.3 详细步骤(避免"云里雾里") + +1. 新建 `plan.md`,固定写 4 行:目标 / 非目标 / 输入 / 验收。 +2. 进入 Plan Mode 后要求输出:文件列表 + 变更顺序 + 测试命令。 +3. 若计划中有"可选增强",先全部标记为不做,只保留 MVP。 +4. 执行中每完成一个子任务,在 `plan.md` 写"已完成 + 证据链接"。 +5. 出现循环修复两次以上,立即停下执行 `/clear`,重开会话重述任务。 + +#### 15.1.4 实战摘录 + +> 如果同一问题解释三次仍跑偏,优先换会话或换问题建模方式,而不是继续加长提示词。 + +#### 15.1.5 文章细节补充(保留原文有效动作) + +- **CLAUDE.md 四原则**:短、具体、解释原因、持续更新。 +- **上下文治理动作**:限定单任务会话、外部记忆文件、`/compact` 摘要、`/clear` 重启。 +- **Prompt 质量三要素**:具体目标、明确禁做项、业务原因说明。 +- **卡住时四步修复**:清会话 → 拆小任务 → 给最小示例 → 换建模角度(如状态机)。 + +#### 15.1.6 可复制提示词模板 + +```text +请先进入规划模式,不要立即编码。 +目标:<目标> +约束:<技术栈/目录/边界> +禁止事项:<不允许新增抽象/不允许改动模块> +验收标准:<测试命令 + 通过条件> +输出:按步骤计划(每步含输入、输出、风险) +``` + +### 15.2 2) 资深工程师完全指南:把 Claude 变成系统组件 + +#### 15.2.1 教程化整合 + +- 把 Claude Code 从"问答工具"升级为"工程系统部件":支持脚本化、日志化、可审计。 +- 模型协作建议:架构与关键决策用强模型,日常实现用高性价比模型。 +- 推荐在常见任务上沉淀 Slash Commands,减少重复 prompt 编写成本。 +- 借助 Hooks/MCP 做前后置检查,把质量控制前移到流程节点。 + +#### 15.2.2 可执行清单 + +- 对高风险模块启用强制检查:安全、权限、数据一致性。 +- 复用无头执行:`claude -p "任务描述"` 集成到脚本或 CI。 +- 每周回顾一次“失败任务日志”,更新 `CLAUDE.md` 与命令模板。 + +#### 15.2.3 详细步骤(系统化落地) + +1. 把高频任务抽成命令:`/commands/review.md`、`/commands/debug.md`。 +2. 在 CI 中增加 `claude -p` 的只读审查任务(不直接写仓库)。 +3. 每次失败记录三件事:触发条件、错误表现、修复动作。 +4. 每周挑 3 条重复问题,更新 `CLAUDE.md` 的"禁止/必须"规则。 + +#### 15.2.4 文章细节补充(系统化飞轮) + +- **飞轮机制**:错误发生 → 查看日志 → 改 CLAUDE.md/命令模板 → 下次更稳。 +- **模型分工建议**:复杂架构和疑难排查用强模型,常规实现用高性价比模型。 +- **会话切换信号**:当问题定义已变,优先新会话,不在旧上下文强行续写。 + +#### 15.2.5 推荐命令清单 + +```bash +# 无头运行(脚本/CI) +claude -p "审查当前改动的安全风险,给出按严重级别排序结果" + +# 继续历史会话 +claude --continue + +# 选择历史会话 +claude --resume +``` + +### 15.3 3) 31个效率技巧:从快捷键到自动化分层使用 + +#### 15.3.1 教程化整合 + +将 31 个技巧收敛为 5 层能力: + +| 层级 | 代表能力 | 关键命令/动作 | +|---|---|---| +| 启动层 | 建立项目记忆 | `/init`、Memory Updates | +| 交互层 | 快速上下文与命令执行 | `@文件`、`! bash`、`Esc Esc` | +| 会话层 | 恢复、命名、导出 | `claude --continue`、`/export` | +| 安全层 | 权限控制与审计 | `/sandbox`、Hooks | +| 自动化层 | 流水线复用 | `claude -p`、Commands、Skills、Subagents | + +#### 15.3.2 可执行清单 + +- 把高频动作固化成 `/commands`; +- 复杂任务统一走 Plan + Review; +- 批处理任务优先转为 `-p` 无头流程。 + +#### 15.3.3 详细步骤(31 技巧落地顺序) + +1. 第一周只上手 6 个:`/init`、`@`、`!`、`Esc Esc`、`/context`、`/sandbox`。 +2. 第二周新增 5 个:`/export`、`/stats`、`/usage`、`/statusline`、`/commands`。 +3. 第三周再启用自动化能力:Hooks、Subagents、Headless。 +4. 每新增一个能力,记录"触发条件 + 不适用场景",避免误用。 + +#### 15.3.4 文章细节补充(关键技巧分组) + +| 目标 | 技巧组合 | 典型收益 | +|---|---|---| +| 快速拿上下文 | `@文件/目录` + `!命令` | 减少切终端/复制粘贴 | +| 快速回滚 | `Esc Esc` + 会话恢复 | 降低试错成本 | +| 长任务续航 | 命名会话 + `/export` | 可追踪、可交接 | +| 自动质检 | Hooks + `/sandbox` | 提前阻断风险变更 | +| 流水线复用 | Commands + Headless | 把经验固化为资产 | + +#### 15.3.5 新手执行顺序(详细) + +1. 先学「上下文与回滚」(`@`、`!`、`Esc Esc`)。 +2. 再学「计划与安全」(Plan Mode、`/sandbox`、Hooks)。 +3. 最后学「规模化」(Subagents、Headless、插件体系)。 + +### 15.4 4) Code Simplifier:把"能跑"整理成"可维护" + +#### 15.4.1 教程化整合 + +- `code-simplifier` 定位是"语义不变的结构优化":改写法,不改行为。 +- 与 `ESLint/Prettier` 互补:后者做格式,前者做可读性与结构简化。 +- 特别适合 AI 快速生成后的清理阶段:先生成,再简化,再测试。 + +#### 15.4.2 可执行清单 + +```bash +claude plugin install code-simplifier +# 或会话内 +/plugin marketplace update claude-plugins-official +/plugin install code-simplifier +``` + +- 在 `CLAUDE.md` 明确导入、命名、类型、函数风格,供 simplifier 遵循。 +- 建议在 PR 前固定跑一次,结合 `git diff` 做人工复核。 + +#### 15.4.3 详细步骤(PR 前整理标准流程) + +1. 功能实现完成后先跑测试,确保"当前代码可用"。 +2. 执行 `code-simplifier` 做结构整理。 +3. 立刻跑同一套测试,确认整理后行为不变。 +4. 打开 `git diff`,重点审查:边界判断、异常路径、公共接口。 +5. 通过后再进入 Code Review,避免把"脏代码"交给审查环节。 + +#### 15.4.4 文章细节补充(工具对比与定位) + +| 工具 | 擅长 | 不擅长 | +|---|---|---| +| ESLint/Prettier | 语法与格式统一 | 语义级简化 | +| Code Simplifier | 可读性、结构化重写 | 规则化格式细节 | +| 人工 Review | 业务语义与架构判断 | 高重复清理劳动 | + +#### 15.4.5 使用场景建议 + +- 长时间编码后清理; +- 大重构后整理; +- AI 生成代码后做第一轮“去噪”; +- 提交 PR 前统一风格并减少理解负担。 + +### 15.5 5) 非技术用户落地指南:安装、配置与工作流心法 + +#### 15.5.1 教程化整合 + +- 非技术用户最容易卡在 API 配置,而不是功能使用。 +- 推荐"先可用,再优化"路径:先连上一个稳定模型,再逐步引入 Skills/MCP。 +- 将复杂配置 GUI 化(如 API 切换器),可显著降低误配置概率。 +- 工具使用的核心不是"会命令",而是"能给清晰输入并持续迭代"。 + +#### 15.5.2 可执行清单 + +1. 安装 Claude Code(Mac/Windows)后先跑一个最小任务验证闭环。 +2. 选定一个主模型通道(国产直连或第三方中转)并完成健康检查。 +3. 使用四步法:定义问题 → 方案探索 → 计划确认 → 执行迭代。 +4. 每完成一个阶段,把关键结论写入文档,防止上下文丢失。 + +#### 15.5.3 详细步骤(从 0 到可用) + +```bash +# macOS / Linux +curl -fsSL https://claude.ai/install.sh | bash + +# Windows PowerShell +irm https://claude.ai/install.ps1 | iex +``` + +1. 安装后执行 `claude`,完成登录与首轮环境检查。 +2. 先做一个最小任务:例如"读取当前目录并总结项目结构"。 +3. 配置 API 通道后做健康检查:固定 3 个测试 prompt(速度/格式/稳定)。 +4. 用四步工作流跑一个小任务(如批量重命名)验证完整闭环。 +5. 将成功流程写入 `CLAUDE.md`,后续直接复用。 + +#### 15.5.4 文章细节补充(安装与配置路线) + +##### 15.5.4.1 A. 安装路线 + +- macOS/Linux:脚本安装; +- Windows:PowerShell 安装; +- 若脚本受限,再退回 `npm` 安装方案。 + +##### 15.5.4.2 B. API 路线 + +1. **国产模型直连**:稳定、低成本、上手快; +2. **第三方中转**:接近原模型体验,需关注服务稳定性; +3. **多源备份**:至少准备 2 个可切换通道,防止单点中断。 + +##### 15.5.4.3 C. 常见卡点排查 + +- 安装成功但命令不可用:重开终端并检查 PATH。 +- 模型无响应:先跑最小 prompt 验证网络与 key。 +- 会话表现忽好忽坏:检查上下文是否过载,必要时重启会话。 + +#### 15.5.5 实战摘录 + +> 普通用户的门槛不是编程语法,而是把模糊需求转成可执行目标与验收条件。 diff --git a/external/ai-research-ebook/src/content/docs/code/gpt.mdx b/external/ai-research-ebook/src/content/docs/code/gpt.mdx new file mode 100644 index 0000000..c0791b7 --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/code/gpt.mdx @@ -0,0 +1,388 @@ +--- +title: GPT-5.2 系列 +description: GPT-5.2 系列(Instant/Thinking/Pro)在科研中的使用 +sidebar: + order: 2 +--- + +import { Card, CardGrid } from '@astrojs/starlight/components'; + +## 1. GPT-5.2 系列概览 + +GPT-5.2 系列(2025年12月发布)适合做**细节 review**和**深度分析**。 + +### 1.1 模型选择矩阵 + +| 模型 | 特点 | 适用场景 | 定价 | +|------|------|---------|------| +| **GPT-5.2 Instant** | 快速响应,延迟低 | 日常代码辅助、快速问答 | 低 | +| **GPT-5.2 Thinking** | 深度推理,复杂分析 | 复杂问题分析、算法设计 | 中 | +| **GPT-5.2 Pro** | 最强专业版 | 关键代码审查、论文评审 | 高 | + +--- + +## 2. 核心能力 + +### 2.1 基准测试 + +| 能力 | 数据 | 说明 | +|------|------|------| +| **ARC-AGI-1** | 90%+ | 首次突破 90% 通用推理基准 | +| **知识截止** | 2025年8月 | 支持最新研究成果 | +| **长上下文** | 1M+ tokens | 支持大型文档分析 | + +--- + +## 3. GPT-5.3-Codex 核心升级 + +### 3.1 核心特性 + +| 特性 | 数据 | 说明 | +|------|------|------| +| **自我参与开发** | - | 早期版本加速自身开发 | +| **速度提升** | 25%+ | 比前代快 25% | +| **Token 减半** | 50% | 相同任务所需 token 减半 | +| **训练速度** | 4x | 训练速度提升 4 倍 | + +### 3.2 性能优势 + +| 基准 | 得分 | 说明 | +|------|------|------| +| **Terminal-Bench 2.0** | 77.3% | 智能体编码领先 | +| **OSWorld** | 64.7% | 桌面自动化领先 | +| **网络安全** | High 级别 | OpenAI 首个获评 | + +--- + +## 4. Claude Opus 4.6 vs GPT-5.3-Codex + +### 4.1 核心对比 + +| 维度 | Claude Opus 4.6 | GPT-5.3-Codex | +|------|-----------------|---------------| +| **上下文窗口** | 100万 tokens (Beta) | 400K tokens | +| **复杂知识工作** | 更强 | 稍弱 | +| **自主编码任务** | 稍弱 | 更强 | +| **发展方向** | 广度(多智能体、Office) | 深度(效率、交互性) | + +### 4.2 适用场景选择 + + + + + +- 需要处理大型代码库 +- 多智能体协作任务 +- 需要 Office 集成 +- 复杂知识工作 + + + + + +- 追求极致的编码效率 +- 需要快速迭代 +- 交互式引导需求 +- 自主编码和自动化任务 + + + + + +--- + +## 5. 科研使用场景 + +
+ + + +验证代码接口设计是否一致,避免隐藏的 API 变更。 + + + + + + +检查实验设置是否公平,baseline 对比是否合理。 + + + + + + +发现数据泄漏、指标计算错误等隐蔽问题。 + + + + + + +代码审查,发现潜在边界条件和异常情况。 + + + + + + +确保评测脚本正确实现,无实现偏差。 + + + + + + +独立复现核心实验,验证结果可复现性。 + + + + +
+ +--- + +## 6. 与 Claude 的配合策略 + +```mermaid +flowchart TD + subgraph 研究流程 + A(Idea 生成) --> B(项目设计) + B --> C(代码实现) + C --> D(实验验证) + D --> E(论文写作) + end + + subgraph 工具分工 + F(Claude Opus 4.6) --> A + G(Claude Code 2.0) --> C + H(GPT-5.2 Pro) --> D + I(GPT-5.2 Instant) --> F + end +``` + +| 任务 | 推荐工具 | 理由 | +|------|---------|------| +| 项目架构设计 | Claude Opus 4.6 | 长上下文,200K tokens | +| 代码实现 | Claude Code 2.0 | SWE-bench 80.9% | +| 细节审查 | GPT-5.2 Pro | ARC-AGI 90%+,深度推理 | +| 快速问答 | GPT-5.2 Instant | 响应速度快 | +| 漏洞检测 | GPT-5.2 Thinking | 深度推理能力 | +| 文献调研 | Claude + Elicit | 自动化综述能力 | + +--- + +## 7. 项目文档生成流程 + +### 7.1 步骤 1: 生成项目基准文档 + +将 idea 交给 GPT Pro/Thinking,让其生成可用的项目文档: + +```markdown +# 项目基准文档模板 + +## 0. 一页速览(30秒读懂) +[核心问题 + 核心贡献] + +## 1. 研究问题与动机(Problem Statement) +- 解决什么问题? +- 为什么这个问题重要? + +## 2. 相关工作地图(Related Work Map) +- 领域分类 +- 主要方法 +- 你的定位 + +## 3. 核心研究假设与可验证主张(Claims) +- Claim 1: [必须对应实验] +- Claim 2: [必须对应实验] + +## 4. 形式化(Problem Formulation) +[数学形式化] + +## 5. 系统设计(System Architecture) +[架构图 + 模块说明] + +## 6. 学习目标(Learning Objective) +[损失函数 + 优化目标] + +## 7. 实验与评测(Experiments) +- 主实验 +- 消融实验 +- 压力测试 + +## 8. 预期贡献(Expected Outcome) +- 论文贡献点 +- 潜在影响 + +## 9. 风险与备选(Risks & Alternatives) +- 最大风险 +- Plan B +``` + +### 7.2 步骤 2: 人工 Review + +- 主要看"claim-实验对齐" +- baseline 是否足够强 +- 是否有致命假设 + +**关键问题**: +- 哪些段落最容易被审稿人抓住? +- 哪些实验设计不够严谨? +- 哪些 claim 缺证据? + +### 7.3 步骤 3: 生成执行文档 + +再次交给 GPT Pro/Thinking,生成专门给 Claude Code 用的**执行文档**(更偏工程步骤与任务拆分)。 + +### 7.4 步骤 4: 迭代到稳定 + +用这种方式迭代到文档稳定为止。 + +--- + +## 8. Scitex:自动化科研平台 + +### 8.1 核心功能 + +| 功能 | 说明 | +|------|------| +| **合成数据生成** | 根据假设自动生成符合统计规律的合成数据 | +| **统计分析** | 自动完成 ANOVA、效应量计算 | +| **可视化** | 生成出版级图表(箱线图、散点图) | +| **论文撰写** | LaTeX 模板自动填充 | +| **同行评审** | AI 模拟审稿人,自动生成 Rebuttal | + +### 8.2 工作流程 + +```mermaid +flowchart LR + A(研究假设) --> B(合成数据) + B --> C(统计分析) + C --> D(可视化) + D --> E(论文撰写) + E --> F(AI 评审) + F --> G(自动修订) +``` + +### 8.3 适用场景 + +- 快速原型验证(合成数据验证假设) +- 人机协作科研 +- 教育与实践培训 + +--- + +## 最佳实践 + +
+ + + +**GPT-5.2 核心优势**:深度推理能力,特别适合发现隐藏假设和逻辑漏洞。 + + + + +
+ +### 9.1 使用建议 + +1. **不要用它写代码**:Claude Code 在代码任务上更强 +2. **用它做审查**:让它找 bug、提质疑 +3. **用它做分析**:让它分析论文、发现逻辑问题 +4. **多用它的 Thinking 模式**:深度推理输出更可靠 + +--- + +## 10. Book 实战增补(逐篇并入) + +### 10.1 Kimi-K2.5 免费通道:作为 GPT/Claude 之外的成本缓冲层 + +这部分整合自 `book/土豪英伟达_Kimi_K2_5_免费用_API_支持OpenCode.md`,核心价值不是“替代一切”,而是给工作流增加一条**低成本可切换通道**。 + +#### 10.1.1 实操配置要点 + +- 平台:NVIDIA Build(注册后获取 API Key)。 +- Base URL:`https://integrate.api.nvidia.com/v1` +- Model ID:`moonshotai/kimi-k2.5` + +#### 10.1.2 推荐使用策略 + +| 任务类型 | 建议模型层 | +|---|---| +| 快速草稿、批量改写、低风险总结 | Kimi-K2.5(成本优先) | +| 高风险技术决策、关键代码审查 | GPT/Claude 强模型(质量优先) | +| 大批量流水任务 | Kimi 先跑,再用强模型抽检 | + +#### 10.1.3 接入清单 + +1. 在平台获取 `API Key` 并保存。 +2. 在客户端填入 `base-url + model-id + key`。 +3. 用 3 个固定测试 prompt 做烟雾测试(速度、稳定性、格式)。 +4. 把它加入模型路由规则,作为“降本 fallback”。 + +#### 10.1.4 详细步骤(可直接执行) + +1. 进入 NVIDIA Build 平台创建 key,并记录创建时间与配额说明。 +2. 在工具侧新增供应商: + - `base_url`: `https://integrate.api.nvidia.com/v1` + - `model`: `moonshotai/kimi-k2.5` + - `api_key`: `<你的key>` +3. 运行三条基准提示词: + - 摘要任务(看压缩质量) + - 结构化输出(看 JSON 稳定性) + - 长文本改写(看一致性) +4. 记录延迟、失败率、输出格式稳定性,写入模型路由文档。 +5. 配置“降级策略”:主模型失败时自动回退到 Kimi。 + +#### 最小验证脚本(示意) + +```bash +curl -sS https://integrate.api.nvidia.com/v1/chat/completions \ + -H "Authorization: Bearer $NVIDIA_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "model": "moonshotai/kimi-k2.5", + "messages": [{"role":"user","content":"用三点总结RAG评测重点"}], + "temperature": 0.2 + }' +``` + +#### 10.1.5 文章细节补充(按原文落地) + +##### 10.1.5.1 A. 账号与密钥准备 + +1. 访问 NVIDIA Build 开发者平台并完成注册。 +2. 在控制台创建 API Key,创建后立即复制保存。 +3. 记录模型标识与基座 URL,后续统一写入配置中心。 + +##### 10.1.5.2 B. 在多工具中的统一接入 + +- **OpenCode/Coding CLI**:新增一个可切换模型配置项; +- **笔记或写作工具(如 Copilot 类)**:复用同一套 key/base/model; +- **脚本任务**:通过环境变量统一注入,减少散落配置。 + +建议新增一个 `models.md`(或等价配置文件)记录: + +- 供应商名称 +- base URL +- model ID +- 适用任务 +- 失败回退路径 + +##### 10.1.5.3 C. 三段式验证(避免上线即翻车) + +1. **连通性验证**:确认接口可通、响应码正常; +2. **能力验证**:固定三组任务评估质量(摘要、结构化、长改写); +3. **稳定性验证**:连续跑 20~50 次,观察超时与格式漂移。 + +##### 10.1.5.4 D. 故障回退策略(建议默认开启) + +- 主模型失败(超时/限流)→ 自动切 Kimi; +- Kimi 输出不满足格式约束 → 再交给主模型做最终规范化; +- 两者都失败 → 返回可重试错误而不是静默空结果。 + +#### 10.1.6 风险提示 + +- 免费额度/策略可能变化,生产任务需保留备选供应商。 +- 同一任务跨模型切换时,需明确输出格式与验收标准,避免结果漂移。 diff --git a/external/ai-research-ebook/src/content/docs/figures/comparison.mdx b/external/ai-research-ebook/src/content/docs/figures/comparison.mdx new file mode 100644 index 0000000..6c96326 --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/figures/comparison.mdx @@ -0,0 +1,142 @@ +--- +title: 专业绘图对比 +description: 主流专业绘图工具对比分析 +sidebar: + order: 2 +--- + +## 1. 论文图表类型清单 + +从几千篇论文里提取"表达强"的图,按类型建一个参考库: + +### 1.1 方法结构图 (Architecture) + +- 整体系统架构 +- 模块关系 +- 数据流向 + +### 1.2 流程图 (Pipeline) + +- 训练流程 +- 推理流程 +- 数据处理流程 + +### 1.3 训练/推理示意图 + +- 算法步骤可视化 +- 时序关系 + +### 1.4 主结果表 + 消融图 + +- 对比实验表格 +- 消融研究图表 + +### 1.5 失败案例可视化 + +- 边界情况 +- 错误分析 + +--- + +## 2. 工具详细对比 + +### 2.1 Mermaid.js + +**优点**: +- 纯文本语法,易于版本控制 +- 支持多种图表类型 +- GitHub/GitLab 原生支持 + +**缺点**: +- 定制能力有限 +- 复杂图表难以实现 + +**代码示例**: + +```mermaid +graph TD + A(输入数据) --> B(特征提取) + B --> C{决策} + C -->|条件1| D(路径1) + C -->|条件2| E(路径2) + D --> F(输出) + E --> F + + +``` + +--- + +### 2.2 PlantUML + +**优点**: +- UML 标准化 +- 支持时序图、用例图等 +- 文本驱动,易于维护 + +**缺点**: +- 学习曲线较陡 +- 主要针对 UML 场景 + +--- + +### 2.3 D3.js + +**优点**: +- 高度可定制 +- 支持复杂交互 +- 强大的数据绑定能力 + +**缺点**: +- 学习成本高 +- 开发时间长 + +**适用场景**: 创新性的数据可视化,需要展示论文的独特洞见 + +--- + +### 2.4 draw.io + +**优点**: +- 完全免费 +- 支持 Git 集成 +- 丰富的图形库 + +**缺点**: +- 大型项目性能下降 +- 协作功能不如 Figma + +--- + +### 2.5 Figma + +**优点**: +- 专业级设计工具 +- 实时协作 +- 强大的组件系统 + +**缺点**: +- 需要学习成本 +- 免费版有功能限制 + +**适用场景**: 高质量插图,特别是需要多人协作时 + +--- + +## 3. 推荐工作流 + +### 3.1 阶段1: 快速原型 + +使用 **draw.io** 或 **Mermaid.js** 快速搭建图表框架 + +### 3.2 阶段2: 精细化 + +对于关键图表,使用 **Figma** 进行精细化设计 + +### 3.3 阶段3: 代码生成 + +对于数据可视化,使用 **D3.js** 或 **Python (matplotlib/plotly)** + +### 3.4 阶段4: 整合 + +使用 **PPT** 或 **Figma** 进行最终整合 diff --git a/external/ai-research-ebook/src/content/docs/figures/design.mdx b/external/ai-research-ebook/src/content/docs/figures/design.mdx new file mode 100644 index 0000000..546421f --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/figures/design.mdx @@ -0,0 +1,160 @@ +--- +title: 图表设计规范 +description: 学术论文图表的视觉语言和设计规范 +sidebar: + order: 3 +--- + +## 1. 图表设计规范 + +选定视觉语言后要定规范(否则全篇风格会散) + +--- + +## 2. 配色方案 + +### 2.1 原则 + +**颜色尽量少**(论文更稳),强调用粗细/虚实区分 + +### 2.2 推荐配色 + +| 用途 | 颜色 | HEX | +|------|------|-----| +| 主色 | 蓝色 | #3B82F6 | +| 强调色 | 橙色 | #F97316 | +| 辅助色 | 绿色 | #10B981 | +| 中性色 | 灰色 | #6B7280 | + +### 2.3 顶会配色参考 + +| 会议 | 主色调 | 特点 | +|------|--------|------| +| NeurIPS | 蓝色系 | 专业、冷静 | +| ICML | 紫色系 | 学术、严谨 | +| ICLR | 橙色系 | 活力、创新 | +| CVPR | 蓝绿色系 | 视觉、科技 | + +--- + +## 3. 字体选择 + +### 3.1 英文字体 + +| 字体 | 适用场景 | 特点 | +|------|---------|------| +| Arial | 通用 | 安全、清晰 | +| Helvetica | 标题 | 专业、现代 | +| Times New Roman | 正文 | 传统、学术 | + +### 3.2 中文字体 + +| 字体 | 适用场景 | 特点 | +|------|---------|------| +| 宋体 | 正文 | 传统、正式 | +| 黑体 | 标题 | 现代、清晰 | + +### 3.3 统一原则 + +- 全篇使用**同一字体族** +- 图表字体与正文保持一致 +- 避免超过3种字体 + +--- + +## 4. 线条规范 + +### 4.1 线宽规范 + +| 用途 | 线宽 | 样式 | +|------|------|------| +| 主要边界 | 2px | 实线 | +| 次要边界 | 1px | 实线 | +| 辅助线 | 0.5px | 虚线 | +| 数据流 | 1.5px | 箭头线 | + +### 4.2 箭头样式 + +- 实心箭头:主要数据流 +- 空心箭头:辅助关系 +- 无箭头:包含关系 + +--- + +## 5. 标注规范 + +### 5.1 图例 + +- 放置位置:右上角或底部 +- 字体:比正文小1-2号 +- 边框:可选,保持简洁 + +### 5.2 说明文字 + +- 字体大小:不小于8pt(确保印刷可读) +- 颜色:与主色调一致 +- 对齐:左对齐,便于阅读 + +--- + +## 6. 尺寸规范 + +### 6.1 期刊/会议要求 + +| 类型 | 单栏 | 双栏 | +|------|------|------| +| 宽度 | 3.5英寸 | 7英寸 | +| 分辨率 | 300 DPI | 300 DPI | +| 格式 | PDF/EPS | PDF/EPS | + +### 6.2 保持可读性 + +- 文字不小于8pt +- 线条不小于0.5pt +- 标注与元素留足够间距 + +--- + +## 7. 常见错误 + +### 7.1 ❌ 错误示范 + +- 颜色过多(超过5种) +- 字体不一致 +- 线条粗细不统一 +- 箭头样式混乱 +- 标注过小难以阅读 + +### 7.2 ✅ 正确示范 + +- 使用2-3种主色 +- 统一字体和字号 +- 线条规范统一 +- 箭头清晰一致 +- 标注清晰易读 + +--- + +## 8. GPT 辅助流程 + +1. GPT 根据论文 + 参考图生成: + - "图的元素清单"(模块/箭头/标注) + - "布局草案"(从左到右还是从上到下) + - "提示词"(给绘图工具出初版草图) + +2. 最后用 PPT/Figma 统一绘制与整合 + +### 8.1 提示词模板 + +``` +请为以下论文内容设计一张架构图,遵循学术规范: + +[论文内容] + +要求: +1. 元素清单:列出所有模块、箭头、标注 +2. 布局:从左到右的数据流 +3. 配色:使用2-3种颜色,符合学术规范 +4. 线条:主要边界2px实线,辅助线1px虚线 +5. 标注:清晰易读,字体不小于10pt +``` diff --git a/external/ai-research-ebook/src/content/docs/figures/tools.mdx b/external/ai-research-ebook/src/content/docs/figures/tools.mdx new file mode 100644 index 0000000..4255633 --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/figures/tools.mdx @@ -0,0 +1,426 @@ +--- +title: 自动化绘图工具 +description: PaperBanana 等自动化学术插图工具介绍 +sidebar: + order: 1 +--- + + + +## 1. PaperBanana (arXiv:2601.23265, 2026) + +### 1.1 核心价值 + +**PaperBanana** 是首个专门为 AI 科学家设计的自动化学术插图生成系统。 + +**论文**: [arXiv:2601.23265](https://arxiv.org/abs/2601.23265) + +### 1.2 核心功能 + +| 功能 | 说明 | +|------|------| +| 自动插图需求识别 | 从论文文本自动识别需要可视化的部分 | +| 顶会风格生成 | 生成符合 NeurIPS/ICML/ICLR 审美的初版 | +| 智能图表推荐 | 根据内容推荐最适合的图表类型 | + +--- + +## 2. 工具生态全景 + +```mermaid +flowchart TD + subgraph ["原型阶段"] + A[Mermaid.js] --> B(快速原型) + C[draw.io] --> B + end + + subgraph ["专业阶段"] + B --> D[Figma] + D --> E(专业插图) + end + + subgraph ["自动化阶段"] + F[PaperBanana] --> G(自动生成) + G --> E + end + + subgraph ["整合阶段"] + E --> H(PPT 整合) + H --> I(最终发布) + end + + + +``` + +--- + +## 3. 工具对比 + +| 工具 | 类型 | 优势 | 适用场景 | 学习曲线 | +|------|------|------|---------|---------| +| **Mermaid.js** | 文本驱动 | 代码驱动、版本友好 | 流程图、时序图 | 低 | +| **PlantUML** | UML | 标准化 | 系统架构图 | 中 | +| **D3.js** | 自定义 | 高度可定制 | 创新可视化 | 高 | +| **draw.io** | 在线绘图 | 免费、协作 | 快速原型 | 低 | +| **Figma** | 协作设计 | 专业级 | 高质量插图 | 中 | +| **PPT** | 整合工具 | 方便整合 | 最终发布 | 低 | + +--- + +## 4. 工具选择决策树 + +```mermaid +flowchart TD + A(图表类型) --> B{是流程图/时序图?} + A --> C{需要高度定制?} + A --> D{团队协作?} + A --> E{快速原型?} + + B -->|是| F[Mermaid.js] + C -->|是| G[D3.js] + D -->|是| H[Figma] + E -->|是| I[draw.io] + F --> J(初版) + G --> K(精细化) + H --> L(协作) + I --> M(快速迭代) + + M --> N(PPT 整合) + + + +``` + +--- + +## 5. GPT 辅助绘图流程 + +### 5.1 阶段 1: 需求分析 + +``` +你是一位专业的学术插图设计师。请分析以下论文内容: + +["粘贴论文的方法部分"] + +输出: +1. 需要可视化的核心概念 +2. 概念之间的关系 +3. 适合的图表类型建议 +``` + +### 5.2 阶段 2: 元素清单 + +``` +基于以下论文内容, 生成架构图的元素清单: + +["论文内容"] + +请输出: +1. 所有模块及其功能描述 +2. 模块间的数据流向 +3. 需要标注的关键信息 +4. 建议的颜色方案 +``` + +### 5.3 阶段 3: 布局建议 + +``` +请为以下内容设计布局方案: + +["元素清单"] + +考虑: +- 从左到右还是从上到下? +- 中心辐射还是层次结构? +- 留白和平衡 +``` + +### 5.4 阶段 4: Mermaid 代码生成 + +```mermaid +flowchart LR + subgraph ["输入处理"] + A(原始数据) --> B(预处理) + end + + subgraph ["核心模型"] + B --> C(特征提取) + C --> D(注意力模块) + D --> E(输出生成) + end + + subgraph ["损失函数"] + F(主损失) --> G(多任务Loss) + H(正则项) --> G + end + + E --> I(最终输出) + + + +``` + +--- + +## 6. 配色方案示例 + +### 6.1 AI 顶会风格 + +| 颜色 | 用途 | HEX | +|------|------|-----| +| 背景 | 图表背景 | #FFFFFF | +| 主模块 | 核心方法 | #10A37F | +| 辅助模块 | 对比方法 | #007AFF | +| 数据流 | 箭头连接 | #6B7280 | +| 高亮 | 关键部分 | #AB68FF | + +### 6.2 暗色主题 + +| 颜色 | 用途 | HEX | +|------|------|-----| +| 背景 | 图表背景 | #212121 | +| 主模块 | 核心方法 | #10A37F | +| 辅助模块 | 对比方法 | #007AFF | +| 数据流 | 箭头连接 | #9CA3AF | +| 高亮 | 关键部分 | #AB68FF | + +--- + +## 7. 最佳实践 + +
+ + +整个论文使用统一的配色和字体方案 + + + +避免过多颜色, 每个颜色有明确含义 + + + +确保在黑白打印时也能清晰区分 + + + +每个图都有清晰的图例和说明 + + +
+ +--- + +## 8. PaperBanana 论文要点补充(2601.23265) + +为响应“把论文内容并入现有章节”的要求, 这里补充 PaperBanana 原文中的关键信息(不上传 PDF 文件): + +### 8.1 研究动机 + +论文明确指出:自动科研系统已能生成方法与实验, 但**发表级插图**仍是人工瓶颈。PaperBanana 的目标是把“论文图”从手工绘制转为可迭代自动流程。 + +### 8.2 方法框架 + +PaperBanana 采用 agentic pipeline, 将插图生成拆为可控阶段: + +1. 检索参考图与风格约束 +2. 规划图的语义内容与视觉结构 +3. 图像渲染与矢量生成 +4. 自我批评与迭代修正 + +### 8.3 评测设置 + +论文引入 **PaperBananaBench(292 个测试样例)**, 覆盖方法图等常见学术插图场景, 用于评估自动生成质量与可用性。 + +### 8.4 工程启发(对本书工作流) + +- 图表要与方法叙事同源:由 method text 驱动, 而不是事后美化。 +- 优先保证“信息正确 + 可复现”, 再追求视觉高级感。 +- 生成后必须保留可编辑中间产物(SVG/分层素材), 便于审稿期快速改图。 + +### 8.5 AutoFigure-edit 项目补充(根目录项目) + +来自 `AutoFigure-Edit-main.zip` 的 README 还提供了一条很实用的“方法图工程化”路线: + +- 从 method text 先生成草图 `figure.png` +- 用 SAM3 做区域检测与框选(产出 `samed.png` + `boxlib.json`) +- 对图元做去背景(RMBG-2.0)得到可复用 icon +- 生成占位模板 `template.svg` 并可迭代优化 +- 最终组装成可编辑的 `final.svg` + +这条链路和 PaperBanana 的共同点是:都强调中间产物可追溯, 便于审稿期快速改图。 + +--- + +## 9. Book 实战增补(逐篇并入) + +> 本节并入 3 篇与"图表/视觉产物自动化"直接相关的文章,重点补齐从论文 Figure 到 PPT/视频转场的可执行流程。 + +### 9.1 1) PaperBanana:论文级 Figure 生成与润色 + +来源:`book/谷歌做了个论文专用版nano_banana_顶会级Figure直出.md` + +#### 9.1.1 关键增量 + +- Figure 目标从“好看”升级为“语义正确 + 学术审美一致”。 +- 支持两类核心产物:方法结构图(Methodology)与统计图(Statistical Plots)。 +- 支持从草图/初版图自动润色:重排层级、统一配色、强化箭头逻辑。 + +#### 9.1.2 多 Agent 生产线(可复用) + +1. 检索参考图与领域范式; +2. 规划结构化图描述(模块、关系、层级); +3. 按审美约束生成初稿; +4. 评论代理迭代纠错(语义一致性检查); +5. 输出论文可用版与可编辑资产。 + +#### 9.1.3 实操结论 + +- 统计图场景下,优先“AI 生成绘图代码再出图”,通常比直接生图更可控。 +- 生成完成后必须保留中间素材,避免审稿期改图返工。 + +#### 9.1.4 详细步骤(PaperBanana 风格流程) + +1. 准备输入:方法段落、关键模块列表、模块关系表(A→B)。 +2. 先产出“结构草稿”而不是终稿,确认语义无误后再美化。 +3. 进入风格增强阶段:统一配色、字体、间距、箭头方向。 +4. 对照正文逐项核验:术语一致、关系一致、无缺漏模块。 +5. 导出两份:投稿图 + 可编辑源文件(SVG/分层)。 + +#### 9.1.5 文章细节补充(质量核验表) + +- 语义一致:图中术语与正文完全一致; +- 逻辑一致:箭头方向与流程关系无冲突; +- 审美一致:配色、字号、间距统一; +- 投稿可用:分辨率与版式满足会议模板要求。 + +### 9.2 2) PPT Skills:从静态页面到转场视频 + +来源:`book/学会了PPTSkills_豆包Kimi都感觉不香了_但90_的人卡在第一步_Gemini_NanoBananaPro_API国内用不了_这篇帮你全解决(8个坑_国内可用).md` + +#### 9.2.1 可执行流程 + +1. 输入主题与约束(页数、风格、分辨率); +2. 批量生成每页视觉稿; +3. 两两页面分析视觉差异; +4. 自动生成转场提示词; +5. 调用视频模型生成过渡片段; +6. 用 `ffmpeg` 合成完整演示视频。 + +#### 9.2.2 工程化建议 + +- 优先“二次开发已有 skill”,避免从零造轮子。 +- 配置分层:官方 API 与第三方 API 兼容两套路径。 +- 对“连通性、鉴权、路径、依赖版本”做启动前自检,减少运行中断。 + +#### 9.2.3 详细步骤(PPT Skills 国内可用改造) + +1. 复制原项目到新目录,避免直接污染上游版本。 +2. 创建虚拟环境并安装依赖: + +```bash +python3 -m venv venv +source venv/bin/activate +pip install google-genai pillow python-dotenv -i https://pypi.org/simple +``` + +3. 复制配置模板并填写: + +```bash +cp .env.example .env +``` + +4. 先做 API 连接测试(返回 200 再继续主流程)。 +5. 官方 SDK 不稳定时切 HTTP 直调,便于定位原始请求/响应。 +6. 生成完成后再执行转场视频流水线,避免前置失败放大损失。 + +#### 9.2.4 文章细节补充(可复制命令顺序) + +```bash +# 初始化 +cd +python3 -m venv venv +source venv/bin/activate +pip install -r requirements.txt + +# 生成静态页 +python generate_ppt.py --plan plans/demo.md --style styles/vector-illustration.md --resolution 2K + +# 生成转场视频(按项目脚本) +python generate_transition.py --input outputs//images --output outputs//videos +ffmpeg -f concat -safe 0 -i outputs//videos/list.txt -c copy outputs//full_ppt_video.mp4 +``` + +#### 9.2.5 常见问题排查(细化) + +1. **API 连通失败**:先用独立脚本验证请求,再跑主流程。 +2. **模型返回空结果**:检查模型名是否与供应商兼容。 +3. **转场合成失败**:检查 ffmpeg 是否安装、输入列表是否存在。 +4. **分辨率不一致**:统一生成参数,避免混用 2K/4K 导致拼接失败。 + +#### 9.2.6 高频坑位清单 + +- Base URL 误配(多拼路径导致 404); +- 运行环境不一致(系统 Python 与虚拟环境混用); +- 官方 SDK 报错不透明(必要时改 HTTP 直调便于排错)。 + +### 9.3 3) 图文一体化 Skill:文章生成 + 配图落地 + +来源:`book/Claude_Code_Skill_自动生成文章内容与配图.md` + +#### 9.3.1 双 Skill 架构 + +- `article-generator`:负责文章结构、SEO 信息与图片占位符。 +- `image-generator`:负责读取占位符上下文、生成 prompt、调用图像流水线。 + +#### 9.3.2 8 步流水线(建议模板) + +1. 生成文章与占位图; +2. 提取占位符上下文; +3. 生成每图 prompt; +4. 批量生图; +5. 转 `webp` 压缩; +6. 上传对象存储(如 R2); +7. 回填 CDN 链接; +8. 输出可发布版本。 + +#### 9.3.3 关键命令示例 + +```bash +npm run generate-images +npm run compress-images +npm run upload-images +npm run replace-images +``` + +#### 9.3.4 详细步骤(图文流水线) + +1. 用 `article-generator` 产出文章与占位图。 +2. 运行 `image-generator` 读取占位并生成 prompt。 +3. 依次执行四个命令:生图 → 压缩 → 上传 → 链接替换。 +4. 每一步检查输出目录是否存在且非空。 +5. 替换完成后抽查 3 处图片链接,确认 CDN 可访问。 + +#### 9.3.5 文章细节补充(目录规范建议) + +```text +articles/.md +prompts//*.md +images//*.png +images//*.webp +``` + +建议每一步都写入一个 `status.json`,用于中断后恢复: + +- `step` +- `ok` +- `updated_at` +- `error` + +#### 9.3.6 章节衔接说明 + +这套方案与本章已有的 `PaperBanana + AutoFigure-edit` 形成互补: + +- 论文 Figure 偏“科研表达规范化”; +- 图文流水线偏“内容生产自动化”; +- 两者都强调中间产物与可追溯性。 diff --git a/external/ai-research-ebook/src/content/docs/idea/projects.mdx b/external/ai-research-ebook/src/content/docs/idea/projects.mdx new file mode 100644 index 0000000..2bd6a4e --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/idea/projects.mdx @@ -0,0 +1,192 @@ +--- +title: 调研项目 +description: 重要调研项目分析, 包括 Sci-Reasoning、AI Research、Idea2Story 等 +sidebar: + order: 2 +--- + +import { Card, CardGrid } from '@astrojs/starlight/components'; + +## 1. Sci-Reasoning 数据集 + +### 1.1 核心价值 + +**Sci-Reasoning** 通过 LLM+Human Review的方法, 对 2023–2025 年 NeurIPS、ICML、ICLR 的 **3819 篇 Oral/Spotlight 论文**进行"学术谱系"建模。 + +**资源链接**: +- 代码: [Sci-Reasoning GitHub](https://github.com/AmberLJC/Sci-Reasoning) +- 数据集: [HuggingFace Dataset](https://huggingface.co/datasets/AmberLJC/Sci-Reasoning) + +```mermaid +flowchart TD + A[3819 Papers] --> B[LLM Annotation] + B --> C[Human Review] + C --> D[15 Patterns] + C --> E[Innovation Recipes] + D --> F(科研创新规律) + E --> F + + + +``` + +--- + +## 2. 15 种科研思维模式详解 + +
+ + +**诊断+重构**:识别当前方法的局限性, 将限制转化为设计约束。 + + + +**跨域融合**:从相邻领域引入解决方案, 激活创新可能。 + + + +**表示转化**:替换问题的基本表示单元, 开辟新视角。 + + +
+ +### 2.1 完整模式列表 + +| 编号 | 模式 | 比例 | 核心价值 | +|------|------|------|---------| +| P01 | Gap-Driven Reframing | 24.2% | 转化限制为设计约束 | +| P02 | Cross-Domain Synthesis | 18.0% | 跨领域融合 | +| P03 | Representation Shift | 10.5% | 表示转化 | +| P04 | Modular Pipeline Composition | 4.2% | 模块化组合 | +| P05 | Data & Evaluation Engineering | 5.4% | 数据与评测工程 | +| P06 | Principled Probabilistic Modeling | 5.4% | 概率建模 | +| P07 | Formal-Experimental Tightening | 6.7% | 理论实验紧密结合 | +| P08 | Approximation Engineering | 4.9% | 可扩展性近似 | +| P09 | Inference-Time Control | 2.4% | 推理时控制 | +| P10 | Structural Inductive Bias | 5.1% | 结构归纳偏置 | +| P11 | Multiscale Modeling | 1.4% | 多尺度建模 | +| P12 | Mechanistic Decomposition | 1.9% | 机制分解 | +| P13 | Adversary Modeling | 1.5% | 对手建模 | +| P14 | Numerics & Systems Co-design | 1.4% | 数值与系统协同 | +| P15 | Data-Centric Optimization | 2.1% | 以数据为中心 | + +--- + +## 3. Innovation Recipes(Innovation Recipes) + +### 3.1 高价值组合 + +```mermaid +flowchart LR + A[Gap-Driven] -->|诊断+重构| B[Representation Shift] + C[Cross-Domain] -->|导入+适配| D[Representation Shift] + E[Gap-Driven] -->|诊断+借用| F[Cross-Domain] + + B --> G("318次") + D --> H("233次") + F --> I("204次") + + + +``` + +| 组合模式 | 出现次数 | 策略 | +|---------|---------|------| +| Gap-Driven + Representation Shift | 318 | "诊断+重构" | +| Cross-Domain + Representation Shift | 233 | "导入+适配" | +| Gap-Driven + Cross-Domain | 204 | "诊断+借用" | + +--- + +## 4. 会议偏好分析 + +| 会议 | 偏好模式 | 写作建议 | +|------|---------|---------| +| **ICML** | 形式化方法 (8.3%), 概率建模 (7.5%) | 增加理论分析和证明 | +| **ICLR** | 表示创新 (11.8%), 基准测试 (8.5%) | 侧重表示分析和可视化 | +| **NeurIPS** | 平衡跨学科覆盖 | 强调方法的生物学合理性 | + +--- + +## 5. LLM 评估基准 (Hit@10) + +这个评估衡量:给定前人工作, LLM 能否预测出研究方向的准确度。 + +| 模型 | Hit@10 得分 | +|------|-------------| +| **Gemini 2.5 Pro** | 49.35% | +| Claude Opus 4 | 42.86% | +| GPT-5.2 | 38.89% | +| Claude Sonnet 4 | 29.87% | + +--- + +## 6. AI Scientist 系列 + +### 6.1 完整对比 + +| 项目 | 时间 | 核心特点 | 代码 | +|------|------|---------|------| +| **The AI Scientist** | 2024.08 | 完整研究自动化 | [SakanaAI](https://github.com/SakanaAI/AI-Scientist) | +| **The AI Scientist-v2** | 2025 | 无代码模板自动化 | - | +| **ChemCrow** | 2024 | 化学研究 Agent (728+ 引用) | - | +| **Virtual-Scientists** | ACL 2025 | 端到端科研协作 | [InternScience](https://github.com/InternScience/Virtual-Scientists) | +| **Kosmos** | 2025 | 自主数据驱动发现 | - | +| **AI-Researcher** | 2025 | 完全自主研究系统 | - | + +--- + +## 7. 实践建议 + +### 7.1 如何借鉴 Sci-Reasoning + +1. **构建调研库时做标签化** + - 每篇论文标注其"创新类型" + - 便于后续 pattern mining + +2. **关注Innovation Recipes** + - 高频组合往往意味着"成熟赛道" + - 低频组合可能有更大的创新空间 + +3. **结合会议偏好** + - ICML 侧重理论 + - ICLR 侧重表示 + - NeurIPS 平衡跨学科 + +
+ +**核心启示**:创新不是玄学, 是可以被系统化分析和复制的模式。 + +
+ +--- + +## 8. 根目录论文内容整合(不上传 PDF 本体) + +### 8.1 论文一:Towards Execution-Grounded Automated AI Research (2601.14525) + +根据原文摘要与项目环境说明, 这项工作提出了一个 **execution-grounded** 的自动科研框架, 核心不是只生成“看起来合理”的 idea, 而是把 idea 真实落地执行并用反馈反哺下一轮搜索。 + +**关键点:** +- 构建自动执行器:自动打补丁、提交代码、分配 GPU、回收训练日志。 +- 设定两个可执行研究环境: + - post-training:GRPO + MATH(Qwen2.5-Math-1.5B) + - pre-training:nanoGPT + FineWeb +- 研究目标从“语言 plausibility”转为“执行后有效性”。 +- 强调 execution feedback 对后续 idea 迭代的价值。 + +### 8.2 论文二:Idea2Story (2601.20833) + +该工作把"research idea → 可写论文叙事"的过程做成了结构化流水线, 核心贡献是 **pre-computation-driven** 思路:尽量把文献理解和结构化表征前置, 降低在线大上下文推理成本与幻觉风险。 + +**关键点:** +- 用知识图谱组织 Idea / Pattern / Domain / Paper 节点。 +- 通过模式选择、故事生成、反思修正, 产出完整 scientific narrative skeleton。 +- 引入 anchored multi-agent review, 使打分更可审计、更可复现。 +- 输出可直接进入写作阶段的结构化结果(title/abstract/problem/method/contrib/experiments)。 + +### 8.3 并入现有工作流的建议 + +1. 在 `1.1 调研` 阶段优先落地“可执行环境”, 避免只停留在概念验证。 +2. 在 `1.2 项目` 阶段增加“叙事骨架检查”, 确保 idea 到论文表达不断层。 +3. 让“执行反馈”与“叙事反馈”双闭环并行:一个校验有效性, 一个校验可写性。 diff --git a/external/ai-research-ebook/src/content/docs/idea/research.mdx b/external/ai-research-ebook/src/content/docs/idea/research.mdx new file mode 100644 index 0000000..9f4ce9d --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/idea/research.mdx @@ -0,0 +1,160 @@ +--- +title: 调研方法 +description: 系统化的文献调研方法,从"看论文"到"产出空白"的完整流程 +sidebar: + order: 1 +--- + +## 1. 调研目标 + +调研的目标不是"看了很多论文",而是要产出**能直接导向可写论文的结果**: + +1. 该方向到底在解决什么问题 +2. 大家默认的设定/评测是什么 +3. 现在的瓶颈在哪里 +4. 哪些空白值得写 +5. 你的 idea 能否形成可验证的 claim + +## 2. 工具选择与分工 + +### 2.1 主力调研工具 + +| 工具 | 适用场景 | +|------|---------| +| **ChatGPT 5.2 Pro** | 体系化综述、把一堆材料整理成"研究地图"、提炼问题定义与评价体系 | +| **Manus / GPT 5.2 Thinking** | 抓漏洞(这篇论文到底新在哪里?有没有偷换设定?) | +| **Gemini 3 Pro Deep Research** | 补全资料、扩展相关工作、找被忽略的假设 | + +### 2.2 推荐分工 + +- **Pro**: 搭主框架(问题→方法→实验→结论)+ 产出"标准化笔记" +- **Thinking**: 抓漏洞(创新点、评价公平性、潜在问题) +- **Deep Research**: 补引用与证据(相关工作漏了谁?还有哪些强 baseline?) + +## 3. 调研的产物清单 + +建议把调研结果固定成 6 份输出: + +1. **Related Work Map(研究地图)** + - 按"问题子类/数据模态/方法范式/训练范式/评测范式"分层 + +2. **Benchmark & Metric Sheet(评测与指标表)** + - 主流数据集/指标/协议/常见坑 + +3. **Assumption Matrix(隐含假设矩阵)** + - 每篇论文默认假设是什么?(资源、标注、算力、可访问信息等) + +4. **Failure Taxonomy(失败模式分类)** + - 方法为什么失败?失败发生在什么条件下? + +5. **Gap List(研究空白清单)** + - 空白不是"没人做",而是"没人把它做成可验证主张 + 可复现实验" + +6. **Claim Candidate Pool(候选主张池)** + - 每个 claim 必须能写成一句话,并且对应至少一个主实验 + 一个消融 + +## 4. 调研流程 + +### 4.1 定义边界 (Scope) + +- 你要解决的"核心问题"一句话是什么? +- 哪些工作算"同类问题",哪些只是"相关但不同问题"? + +### 4.2 建语料库 (Corpus) + +- 每篇至少记录:任务定义、输入输出、数据集、指标、训练资源、关键 novelty、关键 baseline + +### 4.3 标准化阅读 + +不要自由笔记,要"字段化": + +- **Problem**: 解决什么,设定是什么? +- **Key Idea**: 一句话新意是什么? +- **Mechanism**: 为什么有效(作者的因果叙事)? +- **Evidence**: 哪些实验真正在支撑 claim? +- **Baselines**: 对比是否公平? +- **Weakness**: 最大漏洞是什么? +- **Reproduce**: 复现难点在哪里? + +### 4.4 对齐与冲突检测 + +多模型调研结果可能冲突,冲突往往就是"机会点": + +- 该方向究竟默认设定是什么? +- 某些工作是不是在换设定? +- 指标是不是被 hack 了? +- 某些强 baseline 是否被刻意忽略? + +### 4.5 产出 gap → 变成可写 idea + +每个 gap 最终要落到**可写论文的形式**: + +- Claim(主张) +- Setup(设定) +- Method(方法) +- Experiment(实验) +- Expected Outcome(预期) +- Risk(最大风险与备选方案) + +## 5. 文献检索工具 (2025最新) + +| 工具 | 核心功能 | 适用场景 | 链接 | +|------|---------|---------|------| +| **Elicit** | 1.25亿+论文库,自动化系统综述 | 系统性文献调研 | elicit.com | +| **Consensus AI** | AI驱动搜索,快速找证据 | 快速验证假设 | consensus.app | +| **Semantic Scholar** | AI提取论文含义,深度覆盖 | 探索研究脉络 | semanticscholar.org | +| **Scite** | 智能引用追踪(支持/反驳/提及) | 评估论文影响力 | scite.ai | +| **Connected Papers** | 可视化论文关系图 | 发现相关论文 | connectedpapers.com | +| **ResearchRabbit** | 论文推荐类似 Spotify | 持续追踪新工作 | researchrabbit.ai | + +### 5.1 工作流建议 + +1. **初步探索**: Semantic Scholar + Connected Papers +2. **深度调研**: Elicit (自动化筛选和数据提取) +3. **证据验证**: Consensus AI + Scite +4. **持续追踪**: ResearchRabbit (新论文推送) + +## 6. 多模型协作调研 + +使用多个 LLM 并行可以交叉验证,避免单一模型的偏见。 + +### 6.1 推荐配置 + +| 模型 | 角色 | 优势 | +|------|------|------| +| **Claude Opus 4.6** | 主力分析师 | 深度推理,长上下文 (200K) | +| **GPT-5.2 Thinking** | 漏洞检测者 | 捕捉被忽略的假设 | +| **Gemini 2.5 Pro** | 资料补充员 | 强大的检索和整合能力 | + +### 6.2 协作模式 + +1. **分工阅读**: 不同模型负责不同子领域 +2. **交叉验证**: 同一篇论文由多个模型独立分析 +3. **冲突解决**: 冲突点往往是研究空白 +4. **综合汇总**: 由最强模型整合所有发现 + +--- + +## 7. 个人高通量选题法(补充) + +> 这部分来自 `AI research.md` 的个人实践段落,已融合为可执行版本,用于把"读很多论文"变成"筛出能发的 claim"。 + +### 7.1 三层过滤流程 + +1. **候选池层(广覆盖)** + - 先建立 2000+ 论文级别的候选池,按任务、数据模态、评测协议分桶。 +2. **可验证层(可落地)** + - 对每个候选方向补齐:主实验、消融、压力测试、失败预案。 +3. **可投稿层(可叙事)** + - 只保留能形成完整论证链的方向:问题价值 → 方法机制 → 实验证据 → 反质疑预案。 + +### 7.2 快速打分模板(避免主观拍脑袋) + +| 维度 | 问题 | 评分标准(1-5) | +|------|------|----------------| +| **Novelty** | 是否只是已有方法换壳? | 5 = 明确新设定或新机制 | +| **Executability** | 两周内能否跑通主实验? | 5 = 依赖清晰、实现成本可控 | +| **Evaluability** | 是否有公认基准和强 baseline? | 5 = 可直接复现实验协议 | +| **Narrative Fit** | 能否写成完整论文故事? | 5 = 贡献/证据/风险闭环完整 | + +建议只推进总分最高的 Top 1-3 个方向,降低“多线开坑”风险。 diff --git a/external/ai-research-ebook/src/content/docs/index.mdx b/external/ai-research-ebook/src/content/docs/index.mdx new file mode 100644 index 0000000..21e2d05 --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/index.mdx @@ -0,0 +1,138 @@ +--- +title: Vibe Research +description: AI研究电子书 - 从idea到论文发表的完整指南 +template: splash +hero: + title: Vibe Research + tagline: 从 Idea 到顶会投稿的完整 AI 科研操作系统 + actions: + - text: 开始阅读 + link: idea/research + icon: right-arrow + - text: 工具总览 + link: tools/overview + icon: star + variant: minimal + - text: 完整工作流 + link: tools/workflow + variant: secondary +--- + +## 研究工作流概览 + +```mermaid +flowchart LR + subgraph Phase1["Phase 1: Idea"] + A(文献调研) --> B(创新模式分析) + B --> C(Gap 识别) + C --> D(Claim 产出) + end + + subgraph Phase2["Phase2:代码"] + D --> E(项目设计) + E --> F(Claude Code 构建) + F --> G(实验验证) + end + + subgraph Phase3["Phase3:写作"] + G --> H(结构化写作) + H --> I(图表制作) + I --> J(审稿迭代) + end + + Phase1 --> Phase2 + Phase2 --> Phase3 + + classDef phase fill:#f8fafc,stroke:#10a37f,stroke-width:1.6px,color:#111827 + class Phase1,Phase2,Phase3 phase + + +``` + +## 快速价值 + +
    +
  • 🚀 用 14 周路线,把科研任务拆成可执行流水线。
  • +
  • 🧠 用多模型交叉审查,减少方向性失误和实验返工。
  • +
  • 🧪 用结构化实验与审稿闭环,提升投稿成功率。
  • +
  • 📊 用流程图与模板化文档,让团队协作更稳定。
  • +
+ +## 核心功能 + +### Idea 生成 +系统化的文献调研方法,使用多模型交叉验证,从2000+论文中发现可写的研究空白。 + +**核心方法:** +- Related Work Map 构建 +- Assumption Matrix 分析 +- Gap List 产出 +- Claim Candidate Pool + +### 代码实现 +Claude Code、GPT-5.2系列、多Agent框架的最佳实践,高效构建实验系统。 + +**核心能力:** +- 并行协作架构 +- CLAUDE.md 团队记忆 +- Sub-agents 交叉验证 +- 自动化验证闭环 + +### 论文图表 +自动化绘图工具推荐,专业图表设计规范,让论文插图更具说服力。 + +**工具生态:** +- PaperBanana 自动生成 +- Mermaid 流程图 +- D3.js 自定义可视化 +- Figma 专业设计 + +### 论文写作 +论证链构建方法,多模型协作写作,Prism等新一代写作工具使用指南。 + +**写作方法:** +- Claim → Evidence 论证链 +- 多模型协作 tmux 配置 +- 会议特定写作模板 + +### 审稿迭代 +结构化审稿流水线,会议特定审稿模板,Rebuttal写作策略。 + +**审稿流水线:** +- 10+ 轮自动审稿 +- TODO 驱动修改 +- 分类回应策略 + +### 工具生态 +Elicit、Zotero-MCP、Sci-Reasoning等最新工具,构建完整科研工具链。 + +--- + +## 14 周完整时间线 + +| 周次 | 阶段 | 核心任务 | 输出 | +|------|------|---------|------| +| Week 1-2 | 调研 | Elicit 扫描 + Sci-Reasoning 分析 | Gap 清单 | +| Week 3 | 设计 | Claude Code 生成文档 | 项目设计 | +| Week 4-7 | 实现 | Sub-agents 并行开发 | 代码 + 实验 | +| Week 8-9 | 写作 | Prism + 图表生成 | 初稿 | +| Week 10 | 审稿 | 10+ 轮自动审稿 | 修改版 | +| Week 11 | 投稿 | 格式检查 | 最终版 | +| Week 12+ | Rebuttal | 如有需要 | 录用 | + +--- + +## 适用场景 + +- **研究生/博士生**: 系统学习 AI 研究方法,提升论文产出质量 +- **工业界研究员**: 快速掌握最新工具,提高研发效率 +- **独立研究者**: 建立完整的科研工作流,从零开始发表顶会论文 + +## 从这里开始 + +- 新手建议先读:[`idea/research`](idea/research) → [`idea/projects`](idea/projects) +- 需要快速落地:[`tools/workflow`](tools/workflow) + [`review/structured`](review/structured) +- 关注工程效率:[`code/claude`](code/claude) + [`code/agents`](code/agents) + +--- +

本书持续更新中 · 视觉系统升级:2026-02-09 · 默认主题:浅色

diff --git a/external/ai-research-ebook/src/content/docs/library/root-assets.mdx b/external/ai-research-ebook/src/content/docs/library/root-assets.mdx new file mode 100644 index 0000000..0e64d0a --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/library/root-assets.mdx @@ -0,0 +1,591 @@ +--- +title: 科研圣经 +description: 零基础入门科研全指南 - 从顶会对比到Idea生成,从论文阅读到速成写作 +sidebar: + order: 1 +--- + +# 科研圣经 + +本章节汇集零基础入门科研的核心知识,涵盖顶会顶刊对比、Idea生成方法、论文阅读流程与速成写作技巧。 + +--- + +## 一、顶会顶刊投稿对比 + +### 1. 审稿人意见分类 + +- Reject(拒稿) +- Major Revision(大修) +- Minor Revision(小修) +- Accept(接收) + +**会议**:一般只有 Reject(拒稿)和 Accept(接收)两种 + +**期刊**:四种都有 + +> 意见及应对方法见:[知乎文章](https://blog.csdn.net/qq_39856931/article/details/106751954) + +### 2. 审稿人提意见的意图 + +| 类型 | 意图 | +|------|------| +| **会议** | 提意见为了拒绝文章 | +| **期刊** | 审稿人提意见是为了改正文章,意见精确(跟哪些baseline进行对比、补充哪些评价指标、新增哪些数据集实验) | + +### 3. 审稿人细致及专业程度 + +| 类型 | 特点 | +|------|------| +| **会议** | 很少有细节性的意见,质量参差不齐,不懂这个领域也可能是你的审稿人 | +| **期刊** | 认真细致,专业 | + +### 4. 期刊和会议的优缺点 + +#### 会议 + +**时间较短**(顶会可能2-3月左右) + +##### CVPR-2026 时间线 + +| 重要时间节点 | 阶段 | +|-------------|------| +| 2025年10月 | OpenReview投稿网站开放**作者注册** [OpenReview](https://openreview.net/) | +| 2025年10月 | OpenReview投稿网站开放**论文提交** | +| 2025年11月 | **摘要**提交截止(晚上11:59 UTC-12) | +| 2025年11月 | **完整论文**提交截止(晚上11:59 UTC-12) | +| 2025年12月 | **补充材料**提交截止(晚上11:59 UTC-12) | +| 2026年1月 | **第一阶段拒稿**通知 | +| 2026年2月 | 作者**反馈**窗口期 | +| 2026年3月 | **最终录用或拒稿**通知(主要技术轨道) | +| 2026年3月 | **最终版**(Camera-ready)文件提交(主要技术轨道) | +| 2026年6月 | CVPR-2026正式举办 | + +##### AAAI-2026 时间线 + +| 重要时间节点 | 阶段 | +|-------------|------| +| 2025年6月16日 | OpenReview投稿网站开放**作者注册** | +| 2025年6月25日 | OpenReview投稿网站开放**论文提交** | +| 2025年7月25日 | **摘要**提交截止 | +| 2025年8月1日 | **完整论文**提交截止 | +| 2025年8月4日 | **代码/附录材料**截止 | +| 2026年9月8日 | **第一轮结果出炉**(首轮拒稿无rebuttal) | +| 2025年10月2-8日 | rebuttal阶段 | +| 2025年11月3日 | **最终录用通知** | +| 2025年11月13日 | **最终版**(Camera-ready)文件提交 | +| 2026年1月20-27日 | AAAI-2026正式举办 | + +#### 期刊 + +**周期较长**(顶刊可能8月到1年左右不等) + +LetPub 中科院一区 - 人工智能领域期刊查询结果 + +### 5. 顶刊顶会目录 + +**(1)2025年中科院新分区 1区 共53本期刊** + +**(2)CCF会议分类** + +[中国计算机学会推荐国际学术会议和期刊目录(2022更名版,2025年使用).pdf](https://kyc.lsu.edu.cn/_upload/article/files/df/ed/9257ff9c401dabebfe7428c8a9ce/cc033863-6b2b-4616-8bab-ae183ed7a04b.pdf) + +### 6. 计算机可投期刊信息查询及会议截止时间 + +#### (1)期刊 + +**LetPub** 是一个提供最新SCI期刊影响因子查询及投稿分析系统的网站,可按照期刊名、研究方向、影响因子、收录情况等条件筛选和排序 + +[网站地址](https://www.letpub.com.cn/index.php?page=./journalapp) + +#### (2)会议 + +**CCF会议分类及截稿倒计时网站** + +- 网站1:[ccfddl.cn](https://ccfddl.cn/) - 右上角可扫码关注小程序 +- 网站2:[ccfddl.com](https://ccfddl.com/) + +--- + +## 二、零基础入门科研如何想Idea + +### 1. 一篇论文诞生的整体流程图 + +``` +寻找领域内当前效果最好的论文(最好开源) + ↓ +看论文里展示的SOTA结果比较了哪些baseline + ↓ +顺着 baseline 与引用一路往前读 + ↓ +在理论层面进行分析,找改进点 +(哪些工作上不work,能否扩展) + ↓ +复现代码 + ↓ +在代码层面进行分析,找缺陷 +(运行速度慢、内存占用大等) + ↓ +改出自己的Idea +``` + +**举例**:寻找领域内当前效果最好的那篇论文,最好**开源**→看论文里面展示的**SOTA结果比较了哪些baseline**,顺着 baseline 与引用一路往前读→在**理论层面**进行分析,找改进点,例如在哪些工作上是不work的,能否在这个领域进行一些扩展→复现代码→在**代码层面**进行分析,找缺陷,例如虽然某方法性能有提升,但是运行速度很慢、内存占用大,能否进行加速和优化→改出自己的点子。 + +### 2. 寻找论文的渠道 + +#### (1)看最新出顶会中新中的论文 + +**官网** +- NAACL2025接收文章列表:https://2025.naacl.org/program/accepted_papers/ +- CVPR2025接收文章列表:https://cvpr.thecvf.com/Conferences/2025/AcceptedPapers + +**GitHub科研总结** +- CVPR-2025-带代码的阅读论文:https://github.com/Paper2Chinese/CVPR-2025-reading-papers-with-code + +#### (2)大机构数据库 + +- **arxiv平台**新出论文/预印本idea:https://arxiv.org/ +- **谷歌学术**:https://scholar.google.com.hk/ +- **dblp**:https://dblp.org/ +- **Aminer**:https://www.aminer.cn/ +- **huggingface**新出论文:https://huggingface.co/blog/zh?tag=research + +#### (3)Paper with Code上面SOTA结果 + +网址:https://paperswithcode.com/ + +### 3. 建议部分 + +#### (1)阶段划分 + +1. **资格达成期** + - **目标**:满足学位授予的硬性成果指标(篇数、等级) + - **策略**:锁定 1–2 个垂直子领域,开展深度研究,尽量避免进入高曝光热门赛道,降低idea被抢占风险 + +2. **影响拓展期** + - **目标**:在完成资格后,利用已积累的模型、工具链与领域认知,向相邻学科或跨模态任务延伸,追求更高学术影响力 + +#### (2)日常科研习惯 + +1. **输入端** + - **文献精读**:每周 2 篇,输出结构化摘要(问题-方法-缺陷-可改进点) + - **审稿意见逆向阅读**:收集公开评审意见,**提前预判可能被审稿人质疑点** + + **例如**:在 VLPose 这篇论文中,作者引入新模块的同时不可避免地引入了额外参数。为回应可能关于"性能提升是否仅源于参数增长"的质疑,作者在发表前通过对比实验设计,**在参数量可控的前提下**展示了其方法在性能上的显著优势,体现出结构设计本身的有效性。 + + [论文链接](https://arxiv.org/pdf/2402.14456) + + **Table3(b)表**反映的是**在不同模型尺寸下,各微调方法需要训练的参数量**,单位为 MB。 + + ##### 1. Visual Prompt Tuning(视觉提示微调) + + - **核心思想**:不改动模型本体,仅在图像输入的"前面"加上可学习的"提示 embedding" + - 就像在 Transformer 里加了一个"引导标签",帮助模型适应新任务 + - **只训练这部分新加的 prompt**,其余所有模型参数都 **被冻结(frozen)** + - 这叫做**参数高效的微调方法**,很轻量,不会破坏原模型 + + ##### 2. Last Layer Tuning(最后一层微调) + + - **传统做法**:固定前面的模型结构,只微调最后一层(通常是预测层) + - 相比全参数微调,它已经是"轻量"了,但仍然要训练模型的一部分原始参数 + + ##### 两种训练方式的不同点 + + | 项目 | Visual Prompt Tuning | Last Layer Tuning | + |------|---------------------|-------------------| + | 是否改动原模型 | 否 不改,只加东西 | 是 改动最后一层 | + | 可训练参数来源 | 全是新加的 prompts | 原模型中的部分参数 | + | 参数量 | 通常更少 | 较多 | + | 泛化能力保留 | 更强(原模型没动) | 中等(最后一层被改) | + | 结构可逆性 | 可随时删除 prompts 恢复原模型 | 改过原模型不可逆 | + + **结论**是 VLPose 虽然只用了一点点额外的 prompt 参数(比 Visual Prompt 多,但远少于 Last Layer),但性能最好,结构还可逆,泛化也好。以高效的结构设计**消解了对"参数堆砌"的潜在质疑**。 + +2. **输出端** + - **即时记录**:手机备忘录等 + - **定期研讨**:组会、会议、在线论坛等 + +### 4. 科研实操 + +#### 4.1 入门大模型怎么选方向 + +**目标**:先搞清楚"能做多大的实验" + +按**资源**情况划分: + +| 手里的卡 | 推荐任务 | 为什么要这样做 | 真实例子 | +|---------|---------|---------------|---------| +| **资源多** ≥100 张 A100 | 基于开源模型做大规模预训练、指令微调、强化学习 | 卡多=数据吞吐大,能把基线刷高 | LLaMA-65B 原版就是 2048 张 A100 训的 | +| **资源中等** 8 张 V100 | 小领域微调 | 卡不多不少,可以训"窄场景"专用模型 | **纯语言领域**:MoTCoder论文没有在humaneval或者mbpp这样的数据集上做验证,而是使用的Code Contest/apps:在专门做竞赛难度的编程数据集实验,数据量小但难度高。**多模态领域**:Lyra论文训练了一个视觉、语音、语言的多模态大模型,之前的多模态大模型在长音频和长视频上的效果不好,Lyra对应长视频音频的大海捞针任务做了提升 | +| **资源少** 4 张 3090 | 免训练(training-free) | 训练一次要一周,迭代慢;免训可直接推理,每轮迭代速度都很快,无需大量资源 | **纯语言领域**:Quick LLaMa:只做"长文本推理加速",不改权重。**视觉领域**:VisionZIP:对图像的token做压缩 | + +**MoTCoder论文链接**:https://arxiv.org/pdf/2312.15960 + +**Lyra论文链接**:https://arxiv.org/pdf/2412.09501 + +**QuickLLaMA论文链接**:https://arxiv.org/abs/2406.07528 + +**VisionZIP论文链接**:https://arxiv.org/pdf/2412.04467 + +#### 4.2 如何判断一篇论文是否值得精读 + +**值得精读 = 效果好 + 可复现** + +##### (1)效果好 + +**情况1**:在某个Benchmark上面是SOTA + +> **Benchmark**(基准测试)是指一套标准化的测试任务、数据集和评估指标,用于公平、可重复地比较不同方法或系统的性能。 + +**情况2**:不是SOTA,但是现有SOTA是在它的基础上进行改进 + +可能出现这样的情况,假设某论文A提出一个基础模型,后续论文B在A的基础上加了一个"花哨的模块"成为SOTA,但这个模块在数据量小或任务简单时反而拖后腿。所以可能基于论文A的baseline去改进效果会更好。 + +**情况3**:某工作是现有SOTA的基础或它启发了现有SOTA + +如果不知道某论文是否和现有SOTA有关,可从以下4个方面来判断该篇论文的质量: + +**方面1**:大机构 > 小机构 + +###### 常见的大机构类型 + +1. **顶尖高校及实验室** + - 例如:MIT、Stanford、Tsinghua University等 + - 这些学校下的研究实验室(如MIT CSAIL、Stanford AI Lab)在学术圈具有很强影响力 + +2. **知名科研院所** + - 例如:中国科学院、Max Planck Institute、Allen Institute for AI (AI2) 等 + +3. **科技巨头的研究部门** + - 例如:Google Research(Gemini)、DeepMind、Microsoft Research(DeBERTa)、Meta AI(PyTorch、LLaMA)、OpenAI(GPT、CLIP)、NVIDIA Research(Diffusion Models) + - 这些公司投入巨资,且产出大量SOTA研究成果 + +4. **开源社区与合作研究组织** + - Hugging Face、OpenMMLab [香港中文大学多媒体实验室网址](https://openmmlab.com/codebase) + +**方面2**:简单 > 复杂 + +复杂论文可能只是某个模块在起作用,作者为了使这篇论文工作更丰富创新,可能会融合很多模块,导致论文难以理解。 + +**方面3**:清晰 > 繁琐 + +优先论文有公式推导、伪代码和图示。 + +**方面4**:开源可复现 + +(2)可复现 + +优先有公开源码的论文,训练数据和训练参数齐全,近期公开/维护 + +#### Benchmark 是什么? + +**基本定义** + +- 在学术研究中,Benchmark 通常是: + - 一个公开可用的 **标准数据集**(比如 COCO、ImageNet、HumanArt) + - 配有 **明确的评价指标**(如 AP、Accuracy、F1-score) + - 用于对不同模型/方法进行 **公平比较** + +##### 举例 + +| 领域 | Benchmark 示例 | 作用 | +|------|---------------|------| +| 图像分类 | ImageNet | 比谁分类准 | +| 人体姿态估计 | MS COCO / HumanArt | 比谁关键点预测准 | +| 自然语言处理 | GLUE / SuperGLUE | 比谁语言理解好 | +| 大模型能力 | MMLU / GSM8K | 比谁多任务泛化能力强 | + +一个完整的 Benchmark 往往包括: + +| 组件 | 说明 | +|------|------| +| 数据集 | 统一的数据输入(比如图片、文本) | +| 标注 | 统一的"正确答案"或ground truth | +| 评价指标 | 用来打分,比如AP、Recall等 | +| 测试协议 | 比如是否允许使用额外数据、是否使用ground truth框等 | + +#### 4.3 看论文的流程 + +##### (1)标题:大致知道是做什么方面的工作 + +译为:QuickLLaMa:用于大型语言模型的查询感知推理加速 + +通过QuickLLaMa:知道大致在做一件加速的事情 + +##### (2)摘要&示意图:大致知道这篇论文在做什么事情 + +用户询问了关于哈利波特中很细节的问题,普通的Llama3无法给出回答,但是QuickLlama可以在30s内阅读完一本100k token的哈利波特并给出准确回答。 + +如果对这篇文章不感兴趣的话,可以去看下一篇文章了。 + +##### (3)深入看方法/架构示意图:知道这篇论文大致是在用什么框架/方式来实现这件事情 + +###### 图示关键词解释 + +| 名称 | 含义 | 用途 | 举例 | +|------|------|------|------| +| Global Tokens (G) | 模型运行时始终存在的全局信息,如系统提示、任务说明等 | 作为整个推理过程中每一步都可访问的公共信息;增强模型对任务和角色的理解 | 系统提示:"你是一个图书问答助手" | +| Query Tokens (Q) | 用户输入的问题或查询句 | 用来指导模型重点关注哪些记忆块(Memory Blocks) | "哈利第一年结束时金妮指向了谁?" | +| Context Tokens (C) | 模型历史接收过的长文本内容,被拆分成很多 memory blocks 存入"记忆"中 | 构成"记忆仓库";供后续从中查找与 Query 或当前生成位置相关的上下文信息使用 | 整本《哈利·波特》的文本内容被切分成块 | +| Memory Blocks (B) | 上述 Context Tokens 划分后的一块块"笔记段落" | 用来支持查询感知(query-aware)的查找:哪些内容是现在需要调出来使用的 | Block 1 是"火车站送别",Block 2 是"魔法课" 等 | +| Query-related Blocks (R) | 与 Query 或 Current Token 高度相关的 memory blocks | 是从 Memory Blocks 中"筛选"出的重要内容,用于当前推理窗口 | 当前提问与"火车站"段落相关,系统只加载这几段 | +| Local Tokens (L) | 当前生成位置前的短距离上下文 token(相对于 Current Token) | 让模型知道"现在在哪",并为相关性打分提供"当前位置的上下文" | "昨天张三来了,他…" 是生成"是"之前的 L | +| Current Token (H) | 当前要生成/预测的 token 的隐藏向量表示(注意力机制中的 query 向量) | 用于决定当前哪些 memory block 有用(用于 s(B, H) 打分) | 当前正要生成当前准备生成/预测的那个 token"他是___"的"是"这个词 | +| Current Key-Value Cache (M) | 当前这一步模型使用的 key/value 信息组合,包含 G, Q, R, L 四部分 | 作为 Attention 层的输入;也是每一步模型做决策时真正"看到"的全部上下文 | 当前模型输入 = 全局说明 + 问题 + 相关段落 + 上下文 | + +**疑惑**:先有的RAG和QuickLLaMa谁出现时间较早?它们有什么区别? + +——>使用AI工具,用kimi k2查询得到以下对比表格: + +| 维度 | RAG(2020年) | QuickLLaMA(2024年) | +|------|-------------|---------------------| +| 核心机制 | 在生成前,**先检索外部文档**,再让 LLM 结合检索结果生成答案 | **在生成过程中**,动态从长上下文中**查找与查询相关的片段** | +| 数据来源 | 通常是**外部知识库**(如 Wikipedia、向量数据库) | 是**当前输入的长文本本身**(如一本书、一篇长文) | +| 是否需要训练 | 需要训练检索器和生成器 | **无需训练**,可直接插入现有 LLM | +| 使用场景 | 回答**知识密集型问题**(如"2024 年奥运会举办城市") | 回答**长文本内部问题**(如"哈利·波特中谁最后拿到魔杖?") | +| 检索粒度 | 以**文档或段落**为单位 | 以**token 或记忆块**为单位,更细粒度 | + +##### (4)看实验表格结果:看这篇论文的方法比较的baseline有哪些,明确这论文的**优势和提升**是什么 + +图一第一列展示了,不同 benchmark 中的任务(多项选择问答、阅读理解题、对话摘要...) + +第一行:方法对比;第二行:上下文窗口大小(Context Window) + +该方法可以在长文本输入的Benchmark(基准测试)上取得很好的效果。 + +| 方法名称 | 是否需要重新训练 | 是否 Query-aware(查问题重点) | 推理速度 | 显存占用 | 记忆能力 | 综合表现 | +|---------|----------------|------------------------------|---------|---------|---------|---------| +| LLaMA3-8B-1048K | 需要 | 否 | 慢 | 极高 | 很强(靠训练) | 精度高但代价大 | +| StreamingLLM (Stream) | 不需要 | 否 | 快 | 中等 | 差(会忘) | 快但记不住长文本 | +| InfLLM | 不需要 | 否 | 快 | 低 | 一定记忆力 | 比 Stream 更强,但不够聪明 | +| QLLM (QuickLLaMA) | 不需要 | 是 | 最快 | 最低 | 最强(精准查找) | 表现最全面优秀 | + +图二展示了该方法在显存占用和时间上面和baseline的对比,Llama3都显存占用会随着token数量增加呈现指数增长,很快就会OOM超显存,但本文方法最多只使用了20b左右的显存,且时间增长是线性的。故有此结论,该方法相比于之前的baseline在性能、显存占用、速度都有提升。 + +如果对这篇文章不感兴趣的话,认为某个步骤写的不好,可以去看下一篇文章了 + +##### (5)进一步看表格内部的baseline:找baseline对应论文,用上面的流程再读一遍 + +比如这里比较了英伟达的Stream LLM,去找这篇baseline对应的论文,用上面的流程再读一遍,把表格里面所有的baseline都搞懂,就差不多理解当前这篇论文了 + +##### (6)正文/代码:想有哪些地方可以改进,基于当前文章产生一个idea + +#### 4.4 代码跑通流程 + +(1)去 Papers with Code /github等搜索任务关键词。 + +(2)选有官方代码+有训练脚本+最近一年有更新的论文代码(有readme文件、环境版本号具体、参数详细、训练验证等使用教程清晰)。 + +(3)复现 = 配环境 → 下载数据 → 跑脚本 → 得到和作者差不多的分数。 + +**详细流程**:配置好代码环境和数据 → 理解代码运行逻辑(从主函数开始,哪些部分是数据处理,哪些是核心算法) → 基于哪些部分进行改进 → 对核心部分插入断点 + +##### 阶段1 代码理解 + +例如:MoTCoder这篇论文中的模型,通过拆分子模块的方式来对代码问题进行求解,那么你可以输入给他一个例子,观察它是如何对输入问题进行子模块的拆分,从而理解这个模型的运行逻辑。 + +如果代码库提供可视化,可以基于可视化来帮助理解。 + +##### 阶段2 在代码理解之上改进 + +基于现有代码进行改进,比如观察到论文中的attention热力图对某些局部信息没有体现,你就可以新增一个模块来重点关注这些局部细节信息。经过你的新增模块之后,再次绘制热力图,发现之前没有被标注的细节信息被highlight,那么可以证明你新增的模块是有效的。 + +**例子**:论文TagCLIP新增了一个Trusty Learner模块,作者在论文中配了对应的可视化示意图,来展示该模块的作用,用以验证该模块的有效性。 + +**论文研究问题**:现有的基于对比语言-图像预训练(CLIP)的零样本语义分割方法在处理未见类别时存在显著的误分类问题,尤其是容易将未见类别与语义相似的已知类别混淆。 + +**对于阶段2例子的详细解释** + +1. **研究问题:模型会把"没见过的东西"当成"见过的"** + +研究的核心问题是:在图像分割中,模型需要给每个像素打上正确的类别标签。但**很多模型只见过训练集里的"已知类别"**(比如飞机、汽车、牛),一旦遇到"没见过的类别"(比如盆栽、电视、沙发),它**常常会误认为这些新东西也是已知类别**。比如,它可能会把"盆栽"误认为是"瓶子",因为两者颜色或形状有点像。 + +2. **解决方法:让模型学会"这是不是我认识的东西"** + +TagCLIP 的方法是增加了一个 **"Trusty Token"**,它的工作就像一个"可信度检测器"——**先判断这个像素是不是已知类别**。如果它觉得"不像是我认识的东西",就会**抑制**模型给它贴上已知类别的标签。 + +3. **为什么要放 Fig.4?** + +**Fig.4 就是用来证明这个"可信度检测器"真的好用。** + +- 图里左两列显示,检测器对"已知类别"的反应很明显(像飞机、汽车这些它认识的东西被高亮) +- 右一列显示,它对"未知类别"几乎不亮,说明它能**有效忽略没见过的东西** + +简单说,**这张图是"证据"**,让读者一眼就能看出: + +> "看!我们的新方法确实能分清什么是它见过的,什么是它没见过的。" + +#### 4.5 怎么读代码 + +**目标**:搞清楚"哪一段代码是我未来要改的地方" + +**流程**: + +##### 情况1:普通github代码 + +整体框架粗读,重点部分代码亲自跑一遍(插断点),一行行去看其中的变量是如何变化的、变量的形状是什么。 + +##### 情况2:代码库 + +比如在**大模型训练**中常见的**代码库LLaMA-Factory** + +或者在视觉检测中常见的**MMDetection**,但这个代码库的封装很厉害,找变量入口和变化方式都很麻烦。因此这种类型的库不必层层debug,无需完全理解它的代码运作流程,**会用即可**。在使用说明里面看,如何添加一个新的模型、数据集等。 + +**(1)粗读**: + +打开github仓库,先看 `README.md`,找到入口脚本(通常叫 `main.py` 或 `train.py`)。 + +**(2)细读**: + +在核心函数里打断点。 + +1. **IDE**:用 VS Code 打开代码,`F9` 打断点,`F5` 启动调试 +2. **断点**:让程序跑到这行就暂停,方便查看变量值 +3. **变量形状**:`print(x.shape)`,例如 `[32, 128, 768]` 表示 batch=32、序列长 128、特征维度 768 + +**具体例子**:在QuickLLaMA这篇文章中,它的核心框架是attention部分的实现,在代码中嵌套了方程来代替原本模型attention中的forward函数。除了论文中实现的QLLM之外,代码库还包含了这个方向的一系列论文,比如StreamLLM、LM-Infinite、InfLLM这些代码都是用同样的框架实现的,因此可以很容易比较他们之间的不同。 + +[StreamLLM论文](https://arxiv.org/pdf/2309.17453) + +[LM-Infinite论文](https://arxiv.org/pdf/2308.16137) + +#### 4.6 改进现有SOTA + +##### 从论文方法角度进行分析 + +效果好的论文,分成三类: + +**(1)效果好,方法创新——顶级论文** + +能否把这个方法用在新领域,比如Transformer出了之后——>做vision Transformer、Mamba出了之后——>做vision Mamba、Sam出了之后——>做3D Sam。 + +- **优点**:如果是第一个把这个方法用在新领域的人,会受到很多关注 +- **缺点**:竞争大,各大机构都在同台竞技 + +**(2)效果好,方法简单** + +- **缺点**:方法简单但改进有难度 + +**法1**:可以把一项工作尝试用在新领域 + +MOOD的这篇CVPR论文就是把掩码图像建模用在了异常检测方面。掩码图像建模方法在很多领域都证明了其有效性,但未在异常检测领域进行应用,可以实验证明该方法在异常检测的各个方向上是有效的。 + +**法2**:把这篇论文和其他论文的方法相结合(不只是ABC模块组合,也可以是A模块+B方法+C评价指标) + +比如MOODv2就是把**MOOD结合**上**新的预训练策略BEiTv2**再**结合新的异常检测指标ViM** + +**(3)效果好,方法复杂** + +因为方法复杂,尝试把方法进行拆解,把某些**模块替换**成你觉得更好的模块或把某些**模块简化** + +##### 两种通用的方法 + +**法1**:找到现有方法在某些场景不work的缺陷,去掉现有方法成立的一些必要条件 + +现有方法缺陷:比如QuickLLaMa这篇,核心框架是:利用问题在长文本中进行关键信息的查找,有一种情况是,如果用户先输入的是长文本但是却不输入问题,在这种情况下可以改进这一点来形成新的文章。 + +**核心思路就是:去掉现有方法成立的一些必要条件。** + +在新的场景下,这些现有方法就不work了,你就可以针对这种新场景来完成一篇论文。 + +**法2**:关注新出的Benchmark + +比如HumanArt数据集是第一个在艺术领域上的姿态检测数据集,之前的人体姿态估计方法在这个数据集上的效果不好,于是出现了VLPose这个方法,在艺术检测这个数据集上和通用数据集上都做出了改进,形成一篇新论文。 + +**法3**:添加新的Benchmark、消融实验、Task + +当idea已经证明可行,但性能不是SOTA时: + +- **前提建议**:选题阶段即对标SOTA + +- **已验证有效但非SOTA性能:改进与发表策略** + +**(1)尝试和现有SOTA相结合** + +**(2)无法结合SOTA时考虑:是否必须对比?** + +可能**无需比较**的情况: + +- 情况1:是arxiv的预印本,还没有中稿 +- 情况2:是同期工作 + +**必须比较**的情况(想尽办法去证明你的工作是有价值的): + +**方法1**:添加新的 Benchmark(覆盖更多任务维度,提升普适性说服力) + +- 某单一任务性能不如SOTA,但在其他10个任务上表现领先 +- 在多跳推理上优于SOTA,虽然单跳问题上稍逊 + +**方法2**:加新的消融实验(精细化对比同一设置下的表现) + +**原则**: + +- 比较对象限定为同等规模模型/方法 +- 若你贡献在于训练策略,仅需对比其他训练策略 +- 开源只和开源比,小贡献但有价值 + +**方法3**:添加新的task(做别人做不到或未做之事,强调独特性) + +- 多模态模型实现视觉+语音+语言,领先仅支持视觉+语言的方法 +- 能处理2小时视频而非其他方法仅支持2秒视频 +- 引入新语言/场景/规模等独特任务设定 + +**总结** + +若以上方法均尝试后性能仍无竞争力,该idea或许尚不成熟。 + +**科研初期优先级建议**: + +- **效果优于创新**:方法普通但效果好,也值得发表 +- **工程贡献也是贡献**:通过数据工程、训练技巧取得SOTA,也会获得关注 + +> 例如:无需新颖方法,仅凭高质量数据 + 大参数量 + 微调策略也能发表高水平成果(如许多大模型训练类论文)。 + +#### 4.8 怎么把论文的故事讲好 + +**目标**:让审稿人快速相信"你的工作合理且有效" + +##### 解释为什么A+B是有效的 + +**(1)理论上** + +验证A+B > A,用公式推导进行证明(最有说服力,但很多情况下无法用理论求解) + +**(2)现象上** + +观察到了A中的一些现象,B这一模块可以弥补这一缺陷,为什么能够弥补,可以搭配一些可视化,与**4.4 代码跑通流程阶段2 在代码理解之上改进**这部分的原理是相同的 + +**(3)工程上** + +把系统中的每个模块都相对应的**比较同期模块**,验证你的系统所采用的模块是最有效的。 + +**例如** MOOD这篇论文比较了不同的预训练策略、不同的模型架构、不同的OOD检测指标,证明在这个系统中所使用的每一个模块都是最优的。 + +**什么是OOD检测?** + +在现实世界中,很多AI系统面临这样的问题:它们在训练时只见过一部分"已知的数据"(称为**In-Distribution(ID)数据**),但测试或应用时可能会遇到"陌生的数据"(即**Out-of-Distribution(OOD)数据**)。OOD检测的任务就是要让AI系统学会识别出这些陌生的、没见过的数据,并避免错误地对它们做出判断。 + +**(4)总结** + +把论文的**形成过程**讲清楚,包括整个**系统的脉络**、以及**每个模块的作用**、每个模块都要配合对应的**消融实验**来验证模块的有效性 + +--- + +## 三、怎么3天速成一篇论文 + +### 工具 + +- **GPT-4o**(英文) + **DeepSeek**(中文) +- **LaTeX格式论文在线编译网站**:[Overleaf](https://www.overleaf.com/login) + +[Overleaf知乎简介](https://zhuanlan.zhihu.com/p/694594439) + +### 应用举例 + +**(1)给图片写标题**:向GPT输入:图片+提示词(例如:给图片写英文latex格式的caption) + +**(2)写相关工作**:相关工作的每篇论文摘要粘贴下来,输入给GPT可生成一个相关工作初稿 + +**(3)介绍数据集**:将数据集相关介绍输入给GPT生成data部分的段落 + +**(4)组会汇报**:做PPT可以使用DeepSeek:把一周工作内容输入给DeepSeek做PPT,将生成的表格直接粘贴到PPT中,提高工作效率 diff --git a/external/ai-research-ebook/src/content/docs/review/structured.mdx b/external/ai-research-ebook/src/content/docs/review/structured.mdx new file mode 100644 index 0000000..34e4b6d --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/review/structured.mdx @@ -0,0 +1,241 @@ +--- +title: 结构化审稿 +description: 从让它挑刺到迭代闭环的审稿流水线 +sidebar: + order: 1 +--- + + + +## 1. 审稿流水线概览 + +```mermaid +flowchart TD + A(初稿完成) --> B(多模型并行审稿) + B --> C(交叉验证意见) + C --> D(按优先级排序) + D --> E(批量修复) + E --> F(验证修复) + F --> G{通过?} + G -->|否| B + G -->|是| H(定稿) + + classDef key fill:#f8fafc,stroke:#10a37f,stroke-width:1.5px,color:#111827 + class A,H key + + +``` + +--- + +## 2. 审稿输出要结构化 + +审稿必须回答以下关键问题: + +| 问题 | 重要性 | +|------|-------| +| 哪条 claim 缺证据? | 🔴 高 | +| 哪个实验最关键但没做? | 🔴 高 | +| 哪个 baseline 必须补? | 🔴 高 | +| 哪段叙事最像空话? | 🟡 中 | +| 哪个地方最容易被说不新? | 🔴 高 | + +--- + +## 3. 审稿输出模板 + +```markdown +# 审稿意见 + +## 1. 缺证据的 Claim + +| Claim | 问题 | 需要补充 | +|-------|------|---------| +| XXX机制是关键创新 | 没有消融实验 | 去掉XXX后的性能对比 | +| 显著优于SOTA | 评价指标不公平 | 统一指标后重新对比 | + +## 2. 缺失的实验 + +| 实验类型 | 现状 | 需要补充 | +|---------|------|---------| +| 压力测试 | 无 | 低资源/噪声/分布外测试 | +| 消融实验 | 不完整 | 每个模块的独立贡献 | + +## 3. 缺失的 Baseline + +| 方法 | 年份 | 问题 | 需要 | +|------|------|------|------| +| YYY方法 | 2024 | 最新强baseline | 补充对比 | + +## 4. 空话段落 + +| 位置 | 问题 | 建议 | +|------|------|------| +| 3.2节第二段 | 显著提升无数据 | 补充具体数字或删除 | + +## 5. 创新性质疑预案 + +| 可能的质疑 | 应对策略 | +|-----------|---------| +| 只是简单组合 | 强调发现的XXX insight | +| 不公平对比 | 补充公平对比实验 | +``` + +--- + +## 4. TODO 转化模板 + +每条意见对应一个改动 + 验收标准: + +```markdown +# TODO List + +## 紧急(提交前必须完成) + +- [ ] 补消融实验 + - 内容: 去掉模块 X + - 验收: 指标下降 ≥ 5% + +- [ ] 补公平对比 + - 内容: 训练步数对齐 + 算力对齐 + - 验收: 与 YYY 方法公平对比 + +- [ ] 补压力测试 + - 内容: 低资源/噪声/分布外测试 + - 验收: 每个场景至少 1 组实验 + +## 重要(提升质量) + +- [ ] 重写3.2节 + - 内容: 添加具体数据或删除空洞表述 + - 验收: 每段有具体数字支撑 + +- [ ] 增加与ZZZ的对比讨论 + - 内容: 强调我们的 XXX insight + - 验收: 明确说明区别和优势 + +## 可选(锦上添花) + +- [ ] 补充人类评估实验 +- [ ] 增加可视化分析 +``` + +--- + +## 5. 多模型审稿配置 + +### 5.1 模型分工 + +| 模型 | 侧重点 | Prompt 重点 | +|------|-------|-----------| +| Claude Opus 4.6 | 整体逻辑 | 叙事连贯性、创新性 | +| GPT-5.2 Pro | 技术细节 | 方法正确性、实验设计 | +| Gemini Pro | 可复现性 | 代码完整性、数据可用性 | + +### 5.2 审稿 Prompt + +```python + +你是一位 ["会议"] 的资深审稿人。请严格审查以下论文: + +["粘贴论文内容"] + +请从以下角度审查: + +1. **创新性 (Novelty)** + - 主要贡献是什么? + - 与之前工作有何不同? + +2. **技术正确性 (Technical Soundness)** + - 方法是否正确? + - 理论是否成立? + +3. **实验完整性 (Experiments)** + - Baseline 是否足够? + - 消融实验是否完整? + +4. **写作质量 (Writing)** + - 逻辑是否清晰? + - 表述是否准确? + +请用以下格式输出: + +--- +## Overall Score: (1-5) + +## Strengths: +- ... + +## Weaknesses: +1. ["严重"] ... +2. ["中等"] ... +3. ["轻微"] ... + +## Detailed Comments: +... +--- + +``` + +--- + +## 6. 迭代循环 + +### 6.1 10+ 轮迭代流程 + +```mermaid +flowchart TD + A(第1轮审稿) --> B(整理意见) + B --> C(按优先级排序) + C --> D(选择 Top 3-5 问题) + D --> E(批量修复) + E --> F(验证修复) + F --> G{满意?} + G -->|否| A + G -->|是| H(进入下一轮) + + +``` + +### 6.2 迭代原则 + +1. **不要贪多**:每轮只修复 3-5 条 +2. **优先级排序**:先解决最致命的 +3. **验证修复**:修复后重新审稿确认 +4. **记录进度**:保留修改历史 + +### 6.3 审稿闭环增强(补充) + +来自 `AI research.md` 与 `vibe` 并集经验的补充做法: + +- 每轮审稿输出后先做 **Issue 聚类**(证据不足 / 实验缺口 / 叙事问题 / 格式问题) +- 每类只挑 Top 1-2 个高影响问题进入当轮修复,避免“全面开花但都不深” +- 对每个修复项明确“验证证据”字段(新增实验、修改段落、补引用) +- 保留一份 **审稿→修复映射表**,方便 Rebuttal 时直接引用 + +--- + +## 7. 常见问题与应对 + +| 问题 | 应对策略 | +|------|---------| +| 审稿意见冲突 | 以技术细节为准 | +| 无法复现的实验 | 补充复现步骤 | +| 创新性被质疑 | 增加对比实验 | +| 实验设计被质疑 | 解释设计理由 | +| 写作被吐槽 | 精修语言表达 | + +--- + +## 8. 审稿检查清单 + +### 8.1 提交前检查 + +- [ ] 所有 claim 都有实验支撑 +- [ ] 强 baseline 都已对比 +- [ ] 消融实验完整 +- [ ] 压力测试覆盖边界情况 +- [ ] 引用格式正确 +- [ ] 语言表达清晰 +- [ ] 图表清晰可读 +- [ ] 补充材料完整 diff --git a/external/ai-research-ebook/src/content/docs/review/templates.mdx b/external/ai-research-ebook/src/content/docs/review/templates.mdx new file mode 100644 index 0000000..fcd5012 --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/review/templates.mdx @@ -0,0 +1,134 @@ +--- +title: 会议审稿模板 +description: 不同会议的特定审稿标准和模板 +sidebar: + order: 2 +--- + +## 1. 会议特定审稿模板 + +不同会议有不同的审稿标准,以下是定制化模板要点: + +--- + +## 2. 审稿标准对比 + +| 会议 | 审稿重点 | 常见质疑 | +|------|---------|---------| +| **NeurIPS** | 理论创新 + 实验验证 | "神经科学合理性?""SOTA 对比?" | +| **ICML** | 数学严谨 + 理论分析 | "证明是否完整?""设定是否合理?" | +| **ICLR** | 表示理解 + 可视化 | "真正学到了什么?""可视化?" | +| **CVPR** | 实验完整性 | "消融是否充分?""数据集是否公平?" | +| **IROS** | 系统实现 + 真实场景 | "硬件实现?""真实机器人验证?" | +| **ACL/EMNLP** | 语言学洞察 + 评估 | "人类评估?""定性分析?" | + +--- + +## 3. NeurIPS 审稿模板 + +### 3.1 评分标准 + +- **Originality**: 问题/方法/设定的创新性 +- **Significance**: 对领域的影响 +- **Quality**: 技术正确性和实验完整性 +- **Clarity**: 写作和展示质量 + +### 3.2 常见质疑 + +1. "神经科学合理性在哪里?" + - 回应:引用相关神经科学文献 + +2. "与现有方法X的区别是什么?" + - 回应:创建对比表格 + +3. "为什么只在这些数据集上测试?" + - 回应:解释数据集选择的合理性 + +--- + +## 4. ICML 审稿模板 + +### 4.1 评分标准 + +- **Relevance**: 是否符合会议主题 +- **Technical Correctness**: 数学是否正确 +- **Novelty**: 方法或理论的创新性 +- **Clarity**: 表述是否清晰 + +### 4.2 常见质疑 + +1. "理论分析不够完整" + - 回应:补充定理和证明 + +2. "设定是否合理?" + - 回应:论证假设的合理性 + +3. "理论结果与实验的关系不清晰" + - 回应:明确解释理论如何指导实验设计 + +--- + +## 5. ICLR 审稿模板 + +### 5.1 评分标准 + +- **Technical Quality**: 方法的正确性 +- **Novelty**: 创新性 +- **Reproducibility**: 可复现性 +- **Presentation**: 展示质量 +- **Insightfulness**: 洞察深度 + +### 5.2 常见质疑 + +1. "真正学到了什么表示?" + - 回应:添加表示可视化分析 + +2. "可视化不够" + - 回应:添加更多图表 + +3. "为什么这个表示有效?" + - 回应:添加理论或实验分析 + +--- + +## 6. CVPR 审稿模板 + +### 6.1 评分标准 + +- **Originality**: 创新性 +- **Quality**: 技术质量 +- **Clarity**: 清晰度 +- **Significance**: 重要性 + +### 6.2 常见质疑 + +1. "消融是否充分?" + - 回应:添加每个模块的消融 + +2. "数据集是否公平?" + - 回应:确保训练/测试分离 + +3. "SOTA 对比是否完整?" + - 回应:补充最新方法的对比 + +--- + +## 7. IROS 审稿模板 + +### 7.1 评分标准 + +- **Originality**: 创新性 +- **Technical Quality**: 技术质量 +- **Presentation**: 展示质量 +- **Hardware/Real-world**: 硬件实现或真实场景验证 + +### 7.2 常见质疑 + +1. "硬件实现了吗?" + - 回应:描述硬件设置 + +2. "真实机器人验证了吗?" + - 回应:添加真实实验结果 + +3. "仿真到实际的差距?" + - 回应:讨论 sim-to-real 问题 diff --git a/external/ai-research-ebook/src/content/docs/tools/overview.mdx b/external/ai-research-ebook/src/content/docs/tools/overview.mdx new file mode 100644 index 0000000..f9145f5 --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/tools/overview.mdx @@ -0,0 +1,205 @@ +--- +title: 工具总览 +description: AI 研究全流程工具选择矩阵 +sidebar: + order: 1 +--- + + + +## 1. 工具选择矩阵 + +```mermaid +flowchart TD + subgraph ["调研"] + A[Elicit] --> B(文献检索) + C[Sci-Reasoning] --> D(创新分析) + end + + subgraph ["实现"] + E[Claude Code] --> F(代码生成) + G[LangGraph] --> H(工作流编排) + end + + subgraph ["写作"] + I[Prism] --> J(论文写作) + K[PaperBanana] --> L(图表生成) + end + + subgraph ["审稿"] + M[Claude + GPT-5.2] --> N(多模型审稿) + end + + + +``` + +| 任务阶段 | 推荐工具 | 备选方案 | 选择理由 | +|---------|---------|---------|---------| +| **文献检索** | Elicit | Consensus, Semantic Scholar | 1.25亿+论文, 自动化综述 | +| **文献管理** | Zotero-MCP | Mendeley, Papers | Claude 集成, 语义搜索 | +| **代码生成** | Claude Code | GPT-5.2, Codex | 200K上下文, 80.9% SWE-bench | +| **Agent编排** | LangChain/LangGraph | CrewAI, AutoGen | 灵活工作流, 强大社区 | +| **论文写作** | Prism | Overleaf | GPT-5.2 集成, LaTeX 原生 | +| **审稿模拟** | Claude + GPT-5.2 | Gemini Pro | 多模型交叉验证 | +| **画图** | PaperBanana + Mermaid | D3.js, Figma | 自动化 + 版本控制 | + +--- + +## 2. 工具能力对比 + +### 2.1 LLM 能力对比 + +| 模型 | 上下文 | SWE-bench | ARC-AGI | 适用场景 | +|------|--------|-----------|---------|---------| +| **Claude Opus 4.6** | 200K | 80.9% | - | 长文档、代码 | +| **GPT-5.2 Pro** | - | - | 90%+ | 复杂推理 | +| **GPT-5.2 Thinking** | - | - | - | 深度分析 | +| **Gemini 2.5 Pro** | 1M+ | - | 49.35% | 超长文档 | + +### 2.2 文献检索工具对比 + +| 工具 | 论文数 | 特色 | 价格 | +|------|--------|------|------| +| **Elicit** | 1.25亿+ | 自动化综述 | 免费+付费 | +| **Semantic Scholar** | 2亿+ | AI驱动 | 免费 | +| **Consensus** | - | 证据搜索 | 免费+付费 | +| **Scite** | - | 引用质量 | 付费 | + +--- + +## 3. 快速参考 + +### 3.1 常用命令速查 + +```bash +# Claude Code +npm run dev # 启动开发服务器 +astro build # 构建项目 +astro preview # 预览构建结果 + +# MCP +mcp list # 列出已安装的 MCP 服务器 +mcp install zotero # 安装 Zotero-MCP + +# 文献检索 +elicit search "topic" # Elicit 搜索 +``` + +### 3.2 关键链接汇总 + +| 资源 | 链接 | +|------|------| +| **Sci-Reasoning** | https://github.com/AmberLJC/Sci-Reasoning | +| **The AI Scientist** | https://github.com/SakanaAI/AI-Scientist | +| **Elicit** | https://elicit.com | +| **Prism** | https://openai.com/prism/ | +| **claude-scientific-skills** | https://github.com/K-Dense-AI/claude-scientific-skills | +| **LangChain** | https://github.com/langchain-ai | +| **LlamaIndex** | https://github.com/run-llama | + +--- + +## 4. 根目录项目/论文内容并入说明 + +以下内容来自你根目录的项目与论文文件, 已并入现有章节(未上传 PDF 文件本体): + +| 来源 | 并入内容 | 已落地章节 | +|---|---|---| +| 2601.14525 + Automated-AI-Researcher | execution-grounded 自动科研执行闭环(idea→patch→run→feedback) | `idea/projects`, `code/agents` | +| 2601.20833 + Idea2Paper | pre-computation + KG + anchored review 的叙事生成路线 | `idea/projects` | +| 2601.23265 + PaperBanana | 自动学术插图框架、基准与工程策略 | `figures/tools` | +| AutoFigure-edit README | 方法图到可编辑 SVG 的工程流水线实践 | `figures/tools` | + +### 4.1 额外说明 + +- `AI research.md` 的增量内容已融合到现有章节正文(idea / code / figures / writing / review / tools),未新增独立来源页。 +- `vibe` 三文档已先做并集去重,再融合到现有 `2. 代码实现` 及相关工作流章节。 +- 严格来源映射表见 [`library/root-assets`](../library/root-assets) 的“严格映射清单(来源 → 现有章节)”。 + +--- + +## 5. Book 实战增补(逐篇并入) + +### 5.1 1) VSCode Agent Skills:从启用到复用 + +来源:`book/在_VScode_中玩转_Agent_Skills(科研工作者必备skill推荐_一定要收藏).md` + +#### 5.1.1 详细步骤(VSCode 路线) + +1. 打开设置并启用 `chat.useAgentSkills`。 +2. 在项目内创建目录:`.github/skills//`。 +3. 创建 `SKILL.md`,写清触发条件、输入输出、执行步骤。 +4. 按需添加资源文件(示例、脚本、模板)。 +5. 在会话中通过任务描述触发,验证 skill 是否被自动加载。 + +#### 5.1.2 复用策略 + +- 优先复用社区技能库,再做本地改造; +- 改造时优先替换路径、命名、验证命令; +- 先用小样本测试,再扩展到完整任务。 + +#### 5.1.3 文章细节补充(VSCode 实操顺序) + +1. 先创建一个最小 skill(仅 1 个步骤),验证可触发。 +2. 再添加 `workflow-example` 与脚本资源,验证可读取。 +3. 最后引入社区 skill 并本地改造,避免一次导入过大难排错。 + +#### 5.1.4 推荐社区资源(与原文一致) + +- `awesome-copilot`(社区技能集合) +- `anthropics/skills`(官方参考) +- `K-Dense-AI/claude-scientific-skills`(科研场景) + +### 5.2 2) 三 CLI 联动:Claude + Codex + Gemini + +来源:`book/老金开源_Claude4_5_Codex5_1_Gemini3_3大顶级CLI终极联动整合技巧_省钱_高质量_快_.md` + +#### 5.2.1 详细步骤(最小可跑版) + +1. 安装三个 CLI:Claude Code、Codex CLI、Gemini CLI。 +2. 配置 API 与认证(优先图形化管理,避免手工环境变量错误)。 +3. 先从 `Command` 模式启动:分析 → 生成 → 审查。 +4. 任务稳定后升级到 `Skill` 模式(保存中间结果与重试机制)。 +5. 长周期协作用 `MCP` 打通上下文,再按需引入 Subagent 与 Hooks。 + +#### 5.2.2 五种编排方式对照 + +| 方式 | 适用 | 风险 | +|---|---|---| +| Command | 快速、一次性任务 | 复用差、可观测性弱 | +| Skill | 多步骤稳定流程 | 初期配置成本较高 | +| MCP | 长会话与系统互联 | 服务器与权限管理复杂 | +| Subagent | 并行提速 | token 成本上升 | +| Hooks | 自动质检 | 误触发与调试复杂 | + +#### 5.2.3 常见坑提醒 + +- CLI 订阅/授权失效; +- 代理/网络导致认证失败; +- sandbox 权限不足导致写入失败; +- 多模型切换后输出格式漂移。 + +#### 5.2.4 文章细节补充(三CLI联动最小命令) + +```bash +# 1) 安装 +npm i -g @anthropic-ai/claude-code +npm i -g @openai/codex +npm i -g @google/gemini-cli + +# 2) 鉴权(示意,按各自官方流程) +gemini auth login +codex auth login + +# 3) 在 Claude 内先跑 Command 模式 +/ai-team "实现一个最小登录接口并附测试" +``` + +#### 5.2.5 五编排方式的选型建议(更细) + +- 30 分钟内一次性任务:`Command` +- 反复执行的标准流程:`Skill` +- 需要跨系统持久上下文:`MCP` +- 模块可并行且预算允许:`Subagent` +- 固定时机自动质检:`Hooks` diff --git a/external/ai-research-ebook/src/content/docs/tools/workflow.mdx b/external/ai-research-ebook/src/content/docs/tools/workflow.mdx new file mode 100644 index 0000000..ff11b10 --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/tools/workflow.mdx @@ -0,0 +1,528 @@ +--- +title: 完整工作流 +description: 从 idea 到论文发表的完整时间线和步骤 +sidebar: + order: 2 +--- + +import { Card, CardGrid } from '@astrojs/starlight/components'; + +## 1. 完整研究时间线 + +```mermaid +gantt + title 14周顶会论文发表时间线 + dateFormat YYYY-MM-DD + section 调研 + Elicit扫描 :a1, 2026-02-10, 5d + Sci-Reasoning :a2, after a1, 5d + Gap清单产出 :a3, after a2, 4d + section 设计 + 项目文档 :b1, after a3, 5d + 实验计划 :b2, after b1, 3d + section 实现 + 核心代码 :c1, after b2, 14d + 主实验 :c2, after c1, 7d + 消融实验 :c3, after c2, 5d + section 写作 + 初稿 :d1, after c3, 10d + 图表 :d2, after d1, 5d + section 审稿 + 自动审稿 :e1, after d2, 5d + 迭代修改 :e2, after e1, 5d + section 投稿 + 最终版 :f1, after e2, 3d + 提交 :f2, 2026-05-20, 1d + + +``` + +--- + +## 2. Week 1-2: 调研阶段 + +### 2.1 目标 +产出结构化的研究地图和空白清单 + +### 2.2 详细工作流 + +```mermaid +flowchart LR + A(Elicit 扫描) --> B[Semantic Scholar] + B --> C[Sci-Reasoning] + C --> D(整理研究地图) + D --> E(产出 Gap 清单) + + classDef key fill:#f8fafc,stroke:#10a37f,stroke-width:1.5px,color:#111827 + class A,C,E key + + +``` + +### 2.3 具体任务 + +1. **使用 Elicit** 扫描领域关键词(1-2天) +2. **使用 Semantic Scholar** 探索研究脉络(1-2天) +3. **使用 Sci-Reasoning** 分析创新模式(2-3天) +4. **整理研究地图**(2-3天): + - 问题子类分类 + - 方法范式分类 + - 评测基准整理 + +### 2.4 产出 + +| 产出物 | 说明 | +|-------|------| +| Research Gap 清单 | 10-20个候选方向 | +| Benchmark & Metric Sheet | 主流数据集和指标 | +| Assumption Matrix | 隐含假设分析 | + +--- + +## 3. Week 3: 项目设计 + +### 3.1 目标 +确定研究问题和实验计划 + +### 3.2 详细工作流 + +```mermaid +flowchart TD + A(Claude Code 生成文档) --> B(GPT-5.2 审查) + B --> C(人工Review) + C --> D(确定实验计划) + + classDef review fill:#f8fafc,stroke:#10a37f,stroke-width:1.5px,color:#111827 + classDef audit fill:#eff6ff,stroke:#2563eb,stroke-width:1.5px,color:#1e3a8a + class A review + class B,C audit + + +``` + +### 3.3 具体任务 + +1. **生成项目文档**(使用 Claude Code, 2-3天) +2. **审查文档**(使用 GPT-5.2 Pro, 1天): + - claim-实验是否对齐? + - baseline 是否足够强? + - 是否有致命假设? +3. **确定实验计划**(1天): + - 主实验设计 + - 消融实验清单 + - 压力测试场景 + +### 3.4 产出 + +| 产出物 | 说明 | +|-------|------| +| 项目文档 | 20-30页详细文档 | +| 实验计划 | 主实验+消融+压力测试 | +| 里程碑时间表 | 每周任务分解 | + +--- + +## 4. Week 4-7: 代码实现 + 实验 + +### 4.1 目标 +完成实现和主要实验 + +### 4.2 团队配置 + +```mermaid +flowchart TD + subgraph ["开发团队"] + A[Architect x1] --> E(核心模块) + B[Implementer x2] --> E + C[Tester x1] --> F(测试评测) + end + + subgraph ["质量保障"] + F --> G(自动汇总) + end + + classDef role fill:#ecfeff,stroke:#0ea5e9,stroke-width:1.5px,color:#0f172a + class A,B,C role + + +``` + +### 4.3 具体任务 + +1. **并行开发**(Claude Code, 2-3周) +2. **实验执行**(1周): + - 主实验:与 baseline 对比 + - 消融实验:每个模块贡献 + - 压力测试:边界条件 +3. **结果汇总**(2-3天) + +### 4.4 产出 + +| 产出物 | 说明 | +|-------|------| +| 可复现代码库 | 完整的实验代码 | +| 实验结果 | 主表+消融+分析 | +| 复现指南 | 便于他人复现 | + +--- + +## 5. Week 8-9: 论文写作 + +### 5.1 目标 +完成论文初稿 + +### 5.2 写作流程 + +```mermaid +flowchart LR + A(Claude Opus 大纲) --> B(多实例并行写作) + B --> C(PaperBanana 图表) + C --> D(多模型协作完善) + + classDef writing fill:#f8fafc,stroke:#10a37f,stroke-width:1.5px,color:#111827 + class A,B,C writing + + +``` + +### 5.3 具体任务 + +1. **生成大纲**(Claude Opus 4.6, 1天) +2. **并行写作**(多实例, 5-7天) +3. **图表制作**(2-3天) + +### 5.4 产出 + +| 产出物 | 说明 | +|-------|------| +| 论文初稿 | 8-10页正文 | +| 所有图表 | 方法图、结果图 | +| 补充材料 | 额外实验、细节 | + +--- + +## 6. Week 10: 审稿迭代 + +### 6.1 目标 +通过多轮审稿迭代提升论文质量 + +### 6.2 审稿配置 + +| 轮次 | 模型 | 侧重点 | +|------|------|-------| +| 第1轮 | Claude Opus 4.6 | 整体逻辑 | +| 第2轮 | GPT-5.2 Pro | 技术细节 | +| 第3轮 | Gemini Pro | 可复现性 | + +### 6.3 具体任务 + +1. **多模型并行审稿**(2天) +2. **交叉验证意见**(1天) +3. **批量修改**(2天) + +### 6.4 产出 + +| 产出物 | 说明 | +|-------|------| +| 稳定投稿版本 | 准备提交 | +| 审稿意见记录 | 历史迭代 | +| 修改说明 | 响应记录 | + +--- + +## 7. Week 11: 投稿 + +### 检查清单 + +- [ ] 格式符合会议要求 +- [ ] 页数在限制内 +- [ ] 补充材料完整 +- [ ] 作者信息正确 +- [ ] 代码/数据链接有效 + +--- + +## 8. Week 12+: Rebuttal + +### Rebuttal 策略 + +| 意见类型 | 应对策略 | +|---------|---------| +| 可修复的 | 承诺修改, 补充说明 | +| 误解的 | 礼貌澄清, 补充证据 | +| 不同意但合理 | 讨论, 引用支持文献 | +| 不同意的 | 坚定反驳, 有理有据 | + +--- + +## 9. 时间线总览 + +``` +Week 1-2: ██████████████ 调研 +Week 3: ██████ 项目设计 +Week 4-7: █████████████████████████ 代码+实验 +Week 8-9: ██████████████ 写作 +Week 10: ██████████████ 审稿迭代 +Week 11: ████ 投稿 +Week 12+: ██████████████ Rebuttal(如需要) +``` + +### 执行闭环强化(补充) + +在 Week 4-10 阶段建议显式加入 execution-grounded 子循环: + +```mermaid +flowchart LR + A(Idea) --> B(Patch) + B --> C(Run) + C --> D(Feedback) + D --> A +``` + +- **Idea**:提出可验证改动(必须绑定指标) +- **Patch**:最小可执行改动(便于回滚) +- **Run**:在固定环境里跑通训练/评测 +- **Feedback**:记录收益/失败模式并更新下一轮计划 + +这样做可以把“灵感驱动”转换为“证据驱动”,减少无效迭代。 + +--- + +## 10. 每日任务模板 + +### 工作日(周一至周五) + +| 时间 | 任务 | 时长 | +|------|------|------| +| 09:00-10:00 | 计划与回顾 | 1h | +| 10:00-12:00 | 核心工作 | 2h | +| 14:00-17:00 | 深度工作 | 3h | +| 19:00-20:00 | 总结整理 | 1h | + +### 周末 + +| 时间 | 任务 | 时长 | +|------|------|------| +| 10:00-12:00 | 论文写作 | 2h | +| 14:00-17:00 | 审稿迭代 | 3h | +| 19:00-20:00 | 周总结 | 1h | + +--- + +
+ +**核心原则**:工具是辅助, 核心是你的研究洞察力。让 AI 帮你处理重复性工作, 把时间留给真正的思考。 + +
+ +--- + +## 11. Book 实战增补(逐篇并入) + +> 本节整合 6 篇工作流与 Skill 工程化文章,形成“规范定义 → 任务拆解 → 执行闭环 → 验证交付”的统一流程。 + +### 1) Skill 开发完全指南:从可用到可复用 + +来源:`book/Claude_Code_Skill_开发完全指南_从入门到精通.md` + +#### 结构化实践 + +- Skill 本质是标准作业流程(SOP),核心目标是稳定复现而非一次性发挥。 +- 目录按复杂度递进:最小可用 `SKILL.md` → 标准工作流(`workflow/` + `scripts/` + `config/`)。 +- 执行者分工:可确定任务交脚本,不确定任务交 Agent,协调任务交主会话。 + +#### 关键约束 + +- 能脚本化就脚本化,减少 token 消耗; +- Subagent 并行控制节奏(分轮执行 + `/compact`); +- 每一步都有验证点与可恢复状态(`progress.json`)。 + +#### 详细步骤(Skill 从 0 到 1) + +1. 先做最小版:只建 `SKILL.md`,跑通单步骤任务。 +2. 任务稳定后再拆 `workflow/stepNN-*.md`。 +3. 把可确定操作下沉到 `scripts/`,并统一 JSON 返回。 +4. 为每步定义检查点(文件存在、格式正确、字段完整、业务通过)。 +5. 增加断点恢复文件,确保中断后可继续执行。 + +#### 文章细节补充(执行者决策树) + +| 任务类型 | 推荐执行者 | 原因 | +|---|---|---| +| API 调用、文件转换、批处理 | 脚本 | 快、稳、低 token | +| 需要判断/生成/归纳 | Subagent | 语义处理更强 | +| 轻协调与流程推进 | 主 Agent | 全局可控 | + +建议:默认先脚本,只有脚本无法覆盖时再交 Agent。 + +### 2) Skill 最佳实践:文档驱动与需求模板 + +来源:`book/Claude_Code_Skill_最佳实践与创建规范.md` + +#### 三件必做 + +1. 全局约束写入 `CLAUDE.md`; +2. 输出样例放入参考资产(结果参照); +3. 需求清单模板化(输入、输出、约束、验收)。 + +#### 工程建议 + +- Skill 粒度控制在“单一职责 + 可组合”; +- 强制 Plan → Execute → Review 循环; +- `assets/` 作为素材库直取直用,减少上下文消耗。 + +#### 详细步骤(需求模板实装) + +1. 新建 `requirements.md`,固定十项:目标、输入、输出、约束、验收等。 +2. 缺失信息先问清,不允许“边做边猜”。 +3. 先用模板生成首版 Skill,再做两轮真实任务回测。 +4. 将回测问题反写到模板,持续迭代。 + +#### 文章细节补充(十项模板最小集合) + +1. Skill 名称与触发条件; +2. 场景与边界; +3. 必填输入与可选输入; +4. 输出类型与文件结构; +5. 主流程与分支流程; +6. 资源依赖(脚本/参考/资产); +7. 技术与业务约束; +8. 自动/手动验证方式; +9. 参考实现与链接; +10. 优先级与扩展计划。 + +### 3) Skill Creator MVP:先约束行为,再让 AI 写代码 + +来源:`book/我是如何用_Skill_Creator_把一个真实项目拆成一整套_Agent_Skills_的(MVP_实战).md` + +#### MVP 六件套(按项目按需启用) + +- `product-design.skill` +- `frontend-dev.skill` +- `backend-dev.skill` +- `api-contract.skill` +- `testing.skill` +- `deployment.skill` + +核心思想:Skill 要服从项目现实,不存在的模块不生成对应技能。 + +#### 详细步骤(MVP 六件套落地) + +1. 扫描仓库判断是否存在前后端/测试/部署。 +2. 仅为存在模块创建 Skill,其他跳过。 +3. `api-contract` 先行,前后端执行都以接口契约为准。 +4. `testing` 明确“什么算完成”,避免功能完成但不可验收。 + +#### 文章细节补充(各 Skill 的禁止项) + +- `product-design`:不写实现代码; +- `frontend-dev`:不擅自引新库/改工程配置; +- `backend-dev`:不改架构与数据库主结构; +- `api-contract`:只定义契约,不写实现; +- `testing`:不跳过失败用例; +- `deployment`:只记录当前真实发布方式。 + +### 4) Superpowers + Planning-with-Files:流程与记忆分层 + +来源:`book/大佬的Claude_Code是神器你的像玩具_Superpowers___Planning_with_Files的Skills组合拳让_Coding_Agent效率翻倍.md` + +#### 组合策略 + +- Superpowers:负责“流程纪律”(brainstorm → plan → execute → verify)。 +- Planning-with-Files:负责“外部记忆”(`task_plan.md`、`progress.md`、`knowledge.md`)。 + +#### 推荐闭环 + +1. 先澄清目标、受众、约束; +2. 写入结构化计划与验收; +3. 执行时持续记录进度; +4. 结束前跑验证并补齐证据。 + +#### 详细步骤(Superpowers + Planning Files) + +1. 触发 brainstorm 收集关键约束(目标、对象、时间、边界)。 +2. 产出计划并写入 `task_plan.md`。 +3. 每完成子任务更新 `progress.md`(含失败记录)。 +4. 关键决策沉淀到 `knowledge.md`,便于新会话接续。 +5. 交付前执行 verification,保存验证证据。 + +#### 文章细节补充(命令顺序) + +```text +/superpowers:brainstorm +/superpowers:write-plan +/superpowers:execute-plan +# 收尾执行 verification-before-completion +``` + +建议每次执行后同步三文件: + +- `task_plan.md`(目标与步骤) +- `progress.md`(过程与阻塞) +- `knowledge.md`(决策与约束) + +### 5) 规范驱动开发:拒绝“直接开写” + +来源:`book/拒绝屎山代码_让你的_Claude_code_具备类似高级架构师的全局规划与规范执行能力_附实操_.md` + +#### 章节增补要点 + +- AI 本质执行规格,不是自动理解业务语境。 +- 需前置限定:技术栈、目录结构、实现边界、阶段目标。 +- 将“计划文档、执行记录、验证命令”纳入硬门槛,避免伪完成。 + +#### 详细步骤(规范先行) + +1. 在 `CLAUDE.md` 固定四类限制:技术栈、目录、边界、验收。 +2. 任务开始先生成 PLAN,不允许直接进入编码。 +3. 每完成一个任务强制跑测试与审查。 +4. 未通过验证禁止标记完成。 + +#### 文章细节补充(强约束检查项) + +- 是否存在“先写后想”的越序行为; +- 是否缺少测试与验证命令; +- 是否改动了禁止目录或越界模块; +- 是否提供可复验结果(日志/测试报告)。 + +### 6) feature-dev + ralph-loop:规划引擎与长循环执行 + +来源:`book/用_Claude_Code_搭建_从需求到交付_的自动化工作流.md` + +#### 双引擎分工 + +- `feature-dev`:跑 7 阶段(Discovery → Review → Summary)。 +- `ralph-loop`:针对单任务持续迭代,直到达到 completion promise。 + +#### 实战模板 + +```text +feature-dev 负责:方向、架构、验收标准 +ralph-loop 负责:持续执行、测试打磨、问题收敛 +``` + +#### 适用场景 + +- 大特性拆解:先 `feature-dev`,再 `ralph-loop` 跑实现细节。 +- 测试补齐:让 `ralph-loop` 专注覆盖率与边界用例收敛。 + +#### 详细步骤(双引擎协作) + +1. 先用 `feature-dev` 产出设计与实施计划。 +2. 把计划转成 `ralph-loop` 的阶段任务与完成短语。 +3. 设置 `--max-iterations`,避免无限循环。 +4. 循环结束后回到 `feature-dev` 做最终 Review + Summary。 + +#### 文章细节补充(组合使用模板) + +1. `feature-dev` 产出:`DESIGN.md` + `IMPLEMENTATION_PLAN.md` + `QUALITY_CRITERIA.md`。 +2. `ralph-loop` 读取上述文档并分阶段执行。 +3. 每轮循环必须输出:完成内容、失败原因、下一轮计划。 +4. 达到 `completion-promise` 才允许结束循环。 + +### 本章统一检查清单(新增) + +- 是否先完成需求澄清与计划文档? +- 是否为关键步骤定义了验证标准? +- 是否记录了执行进度与中断恢复点? +- 是否把复用能力沉淀为 Skill/命令,而非临时对话? diff --git a/external/ai-research-ebook/src/content/docs/writing/collaboration.mdx b/external/ai-research-ebook/src/content/docs/writing/collaboration.mdx new file mode 100644 index 0000000..7b42201 --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/writing/collaboration.mdx @@ -0,0 +1,217 @@ +--- +title: 多模型协作写作 +description: 使用多个 AI 模型协作进行论文写作 +sidebar: + order: 3 +--- + +import { Card, CardGrid } from '@astrojs/starlight/components'; + +## 1. 多模型协作概览 + +```mermaid +flowchart TD + subgraph ["写作流程"] + A(大纲生成) --> B(分段写作) + B --> C(一致性检查) + C --> D(整合优化) + end + + subgraph ["模型分工"] + E[Claude Opus 4.6] --> A + F[Claude Code] --> B + G[GPT-5.2 Pro] --> C + H[Gemini Pro] --> C + end + + + +``` + +--- + +## 2. AI-research-SKILLs + +"20-ml-paper-writing"模块制定了严格规则:**绝不凭记忆生成引用**, 强制 5 步: + +```mermaid +flowchart LR + A(检索) --> B(双源验证) + B --> C(获取官方 BibTeX) + C --> D(核对摘要) + D --> E(写入) + + + +``` + +覆盖 AI 科研全流程的 **77 项技能**(20 个技术板块)。 + +--- + +## 3. tmux 工作流配置 + +让 Claude / GPT-5.2 / Gemini Pro 分工协作: + +| tmux 实例 | 负责内容 | 模型选择 | 协作方式 | +|---------|---------|---------|---------| +| Instance 1 | Related Work | Claude Code | 文献梳理与对比 | +| Instance 2 | Method 写作 | Claude Code | 方法描述与形式化 | +| Instance 3 | 实验描述 | GPT-5.2 Pro | 实验设计和结果 | +| Instance 4 | 一致性校对 | Gemini Pro | 术语、符号统一 | + +--- + +## 4. 协作写作流程 + +### 4.1 阶段 1: 大纲生成 + +使用 Claude Opus 4.6 生成长大纲(200K 上下文) + +```markdown +# 论文大纲模板 + +## 1. Introduction (1.5页) +- 研究问题 +- 核心挑战 +- 你的贡献(3-4点) + +## 2. Related Work (2页) +- 领域分类 +- 主要方法 +- 你的定位 + +## 3. Method (4页) +- 问题形式化 +- 核心方法 +- 技术细节 + +## 4. Experiments (3页) +- 实验设置 +- 主结果 +- 消融实验 + +## 5. Conclusion (0.5页) +- 总结 +- 局限 +- 未来方向 +``` + +### 4.2 阶段 2: 分段写作 + +各实例并行处理不同章节: + +```bash +# tmux 窗口布局 +# ================= +# 窗口 1: Related Work +# 窗口 2: Method +# 窗口 3: Experiments +# 窗口 4: Introduction/Conclusion +# 窗口 5: 整合校对 +``` + +### 4.3 阶段 3: 一致性检查 + +使用专门实例校对一致性: + +| 检查项 | 工具 | 说明 | +|-------|------|------| +| 术语一致性 | Claude Code | 统一术语使用 | +| 符号一致性 | GPT-5.2 Pro | 数学符号检查 | +| 引用格式 | Gemini Pro | BibTeX 格式 | + +### 4.4 阶段 4: 整合优化 + +由最强模型整合所有内容, 确保叙事流畅。 + +--- + +## 5. 术语表管理 + +### 5.1 术语表示例 + +```markdown +# 术语表 (GLOSSARY.md) + +| 中文 | 英文 | 缩写 | 定义 | +|------|------|------|------| +| 注意力机制 | Attention Mechanism | Attn | ... | +| 多头注意力 | Multi-Head Attention | MHA | ... | +| 自注意力 | Self-Attention | SA | ... | +``` + +### 5.2 共享术语表工作流 + +```mermaid +flowchart TD + A(创建术语表) --> B(推送到共享仓库) + B --> C(各实例拉取最新) + C --> D(写作时引用) + D --> E(发现新术语) + E --> B + + + +``` + +### 5.3 使用建议 + +
+ + +单一文件管理所有术语, 避免分散 + + + +使用 Git 追踪变更, 可回滚 + + + +各实例定期更新术语表 + + + +建立术语决策流程 + + +
+ +--- + +## 6. 会议特定建议 + +| 会议 | 偏好 | 写作建议 | +|------|------|---------| +| **NeurIPS** | 神经科学结合 | 强调方法的生物学合理性 | +| **ICML** | 理论基础 | 增加理论分析和证明 | +| **ICLR** | 表示学习 | 侧重表示分析和可视化 | +| **CVPR** | 实验完整性 | 充分的消融和对比实验 | +| **ACL/EMNLP** | 语言学洞察 | 增加定性分析和案例分析 | + +--- + +## 7. 常见写作误区 + +
+ +❌ **"像论文但没信息"** - 缺乏实质贡献 + +❌ **过度声明** - claim 超出实验支持 + +❌ **忽略关键 baseline** - 对比不充分 + +❌ **叙事不清** - 逻辑跳跃 + +
+ +--- + +## 8. 协作检查清单 + +- [ ] 术语表已创建并同步 +- [ ] 各章节使用统一格式 +- [ ] 引用已验证 +- [ ] 符号系统一致 +- [ ] 叙事逻辑连贯 +- [ ] 实验claim对齐 diff --git a/external/ai-research-ebook/src/content/docs/writing/methods.mdx b/external/ai-research-ebook/src/content/docs/writing/methods.mdx new file mode 100644 index 0000000..7f88378 --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/writing/methods.mdx @@ -0,0 +1,154 @@ +--- +title: 写作方法 +description: 论文写作的核心方法和论证链构建 +sidebar: + order: 1 +--- + + + +## 1. 写作核心原则 + +写作最核心的是:**让审稿人相信你的 claim**。 + +
+ +**核心流程**:论证链 → Outline → 文字生成 + +
+ +--- + +## 2. 构建论证链(不写正文) + +先把论文的"论证链"写出来: + +```mermaid +flowchart TD + A[Claim 1] --> B(需要哪些证据?) + A --> C(哪些是必要的?) + A --> D(哪些是锦上添花?) + + B --> E(主实验) + B --> F(消融实验) + B --> G(压力测试) + + +``` + +### 2.1 论证链示例 + +``` +Claim 1: 我们的方法在低资源场景下优于baseline +├── 主实验: 在3个数据集上对比, 指标提升X% +├── 消融: 验证每个模块的贡献 +└── 压力测试: 资源减少10%/50%/90%时的表现 + +Claim 2: 方法的关键创新是XXX机制 +├── 消融: 去掉XXX后性能下降Y% +├── 可视化: 展示XXX激活模式 +└── 理论分析: XXX为什么有效 +``` + +--- + +## 3. 写 Outline(只写要点) + +每小节回答一个问题: + +| 问题 | 含义 | +|------|------| +| 这节要说服审稿人什么? | 核心主张 | +| 审稿人可能质疑什么? | 潜在反驳 | +| 我用什么证据挡住? | 实验支撑 | + +### 3.1 Outline 模板 + +```markdown +# 1. Introduction + +## 要回答的问题 +- 这个问题为什么重要? +- 现有方法有什么问题? +- 我们的核心贡献是什么? + +## 可能的质疑 +- "这个问题真的重要吗?" + → 回答:用具体应用场景和数据说明 +- "你们只是简单的组合吧?" + → 回答:强调我们发现的XXX insight + +## 关键证据 +- 实验1: 在3个标准数据集上提升X% +- 实验2: 验证了XXX机制的必要性 +``` + +--- + +## 4. 生成具体文字 + +最后再让模型生成具体文字: + +**好处**: +- 不会空谈 +- 每个观点都有支撑 +- 逻辑清晰 + +--- + +## 5. MCP 工具与 Skills + +### 5.1 MCP工具(文献搜索与访问) + +| 工具 | 功能 | 适用场景 | +|------|------|---------| +| **Zotero-MCP** | 直接访问本地文献库 | 文献管理、引用分析 | +| **Perplexity MCP** | Deep Research 模式 | 技术调研、综述写作 | +| **ClickHouse MCP** | 数据库集成 | 大数据分析 | +| **Zen MCP** | 研究工作流 | 流程自动化 | +| **Paper Search MCP** | 多数据库搜索 | 快速获取新论文 | + +### 5.2 Skills工具(科研分析与写作) + +| 工具 | 技能数量 | 特色 | +|------|---------|------| +| **claude-scientific-skills** | 140+ | 即用型技能, 多领域覆盖 | +| **claude-scientific-writer** | - | 专注科研写作 | +| **Content-Research-Writer** | - | 长文协作写作 | +| **20-ml-paper-writing** | 77项 | 完整 ML 论文写作流程 | + +### 5.3 GitHub 资源 + +- [claude-scientific-skills](https://github.com/K-Dense-AI/claude-scientific-skills) + +--- + +## 6. 写作检查清单 + +
+ + +每个 claim 都有对应的实验支撑 + + + +对比了所有强 baseline + + + +叙事流畅, 无逻辑跳跃 + + + +全文使用统一的术语 + + + +引用格式正确, 来源可靠 + + + +图表有清晰的图例和说明 + + +
diff --git a/external/ai-research-ebook/src/content/docs/writing/prism.mdx b/external/ai-research-ebook/src/content/docs/writing/prism.mdx new file mode 100644 index 0000000..abc5245 --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/writing/prism.mdx @@ -0,0 +1,210 @@ +--- +title: Prism 编辑器 +description: OpenAI Prism LaTeX 原生科研写作工作区 +sidebar: + order: 2 +--- + + + +## 1. Prism 概述 + +**Prism** 是 OpenAI 推出的 **LaTeX 原生科研写作工作区**, 发布于 2026年1月27日。 + +
+ +**核心优势**:GPT-5.2 原生集成, 无需插件即可获得最强 AI 写作辅助。 + +
+ +--- + +## 2. 核心特性 + +```mermaid +flowchart TD + subgraph ["核心能力"] + A(LaTeX 原生) --> B(无缝迁移) + C(GPT-5.2 集成) --> D(智能辅助) + E(实时协作) --> F(多人编辑) + end + + subgraph ["写作支持"] + G(中英文支持) --> H(双语写作) + I(公式图表) --> J(可视化) + K(引用管理) --> L(智能引用) + end + + + +``` + +| 特性 | 说明 | +|------|------| +| **LaTeX 原生** | 无缝迁移现有 Overleaf 项目 | +| **GPT-5.2 集成** | 最强 AI 写作辅助 | +| **实时协作** | 多人同时编辑 | +| **中英文支持** | 双语写作无障碍 | +| **公式图表** | 内置可视化工具 | +| **引用管理** | 智能文献引用 | + +--- + +## 3. Prism vs Overleaf + +| 维度 | Prism | Overleaf | +|------|--------|----------| +| **AI 集成** | GPT-5.2 原生 | 需外部插件 | +| **实时协作** | ✓ | ✓ | +| **中文支持** | 原生 | 需配置 | +| **定价** | 免费(个人) | 有限制 | +| **模板库** | 基础模板 | 丰富模板 | +| **编译速度** | 快 | 快 | + +--- + +## 4. 写作工作流 + +### 4.1 阶段 1: 项目设置 + +```bash +# 创建新项目 +1. 访问 openai.com/prism/ +2. 点击 "New Project" +3. 选择论文模板 (NeurIPS/ICML/ICLR) +4. 配置基础设置 +``` + +### 4.2 阶段 2: AI 辅助写作 + +```latex +% 使用 AI 辅助生成内容 +% 在 Prism 中, 选中文本并点击 "Ask AI" + +\section{Method} +我们的方法基于 Transformer 架构, +引入了一种新颖的 XXX 机制。 + +% AI 建议扩展: +% 基于 Transformer 架构, 我们提出了一种 +% 自适应注意力机制 (Adaptive Attention), +% 能够根据输入动态调整注意力分布。 +``` + +### 4.3 阶段 3: 协作编辑 + +| 功能 | 操作 | +|------|------| +| 实时同步 | 自动保存到云端 | +| 评论讨论 | Cmd+Click 添加评论 | +| 版本历史 | 查看历史版本 | +| 任务分配 | @mention 协作者 | + +--- + +## 5. 中英文写作支持 + +### 5.1 混合写作 + +```latex +% 中文摘要 + 英文正文 + +\begin{abstract} +本文提出了一种新颖的 XXX 方法, +在多个基准数据集上取得了显著的性能提升。 +\end{abstract} + +\section{Introduction} +Deep learning has achieved remarkable success... +% 可随时切换语言 +``` + +### 5.2 翻译辅助 + +``` +Prism 内置翻译功能: +1. 选中中文段落 +2. 点击 "Translate to English" +3. AI 生成学术英文版本 +4. 可选择保留/修改 +``` + +--- + +## 6. 引用管理 + +### 6.1 智能引用 + +```latex +% Prism 会自动推荐相关引用 + +我们的方法与 XXX[1] 有显著不同。 + +% AI 建议: +% 相比之前的工作[2,3], 我们的方法... +``` + +### 6.2 引用格式 + +| 会议 | 格式 | +|------|------| +| NeurIPS | \cite{} | +| ICML | \citep{} | +| ICLR | \cite{} | + +--- + +## 7. 使用场景 + +
+ + +AI 辅助生成大纲、扩展段落、优化表达 + + + +快速定位、修改、验证修改内容 + + + +多人实时编辑, 版本管理 + + + +中英文互译, 保持学术表达 + + + +自动格式化, 符合会议要求 + + + +自动验证引用完整性 + + +
+ +--- + +## 8. 快速开始 + +1. **访问官网**: [openai.com/prism](https://openai.com/prism/) +2. **创建账户**: 使用 OpenAI 账户登录 +3. **新建项目**: 选择论文模板 +4. **开始写作**: 使用 GPT-5.2 辅助 + +--- + +## 9. 最佳实践 + +
+ +**建议**:先用 AI 生成初稿, 再人工精修, 确保内容的准确性和创新性。 + +
+ +1. **大纲先行**:让 AI 生成结构化大纲 +2. **分段写作**:逐章节完善, 避免大段重写 +3. **及时保存**:利用版本历史回溯 +4. **引用验证**:提交前检查引用完整性 +5. **格式检查**:确认符合会议模板 diff --git a/external/ai-research-ebook/src/content/docs/writing/rebuttal.mdx b/external/ai-research-ebook/src/content/docs/writing/rebuttal.mdx new file mode 100644 index 0000000..463bd07 --- /dev/null +++ b/external/ai-research-ebook/src/content/docs/writing/rebuttal.mdx @@ -0,0 +1,186 @@ +--- +title: Rebuttal 策略 +description: 如何有效撰写 Rebuttal 回应审稿意见 +sidebar: + order: 3 +--- + +## 1. Rebuttal 策略 + +--- + +## 2. 分类回应 + +### 2.1 可修复的 + +**策略**: 明确承诺修改,给出具体方案 + +**模板**: + +``` +感谢审稿人的建议。我们将按以下方式修改: + +1. 补充消融实验(详见附件图X) +2. 增加与方法Y的对比 +3. 重写第3节以更清晰地表达... + +我们已将这些修改在附件中标注。 +``` + +### 2.2 误解的 + +**策略**: 礼貌澄清,补充说明 + +**模板**: + +``` +感谢审稿人的关注。我们想澄清以下几点: + +1. 关于XXX:我们的方法确实做了... +2. 关于YYY:这可能是一个误解,实际上是... + +我们在文中已添加更清晰的说明。 +``` + +### 2.3 不同意但合理的 + +**策略**: 讨论并引用支持文献 + +**模板**: + +``` +审稿人提出了一个很好的观点。我们同意..., + +但我们选择这种方法的原因是... + +相关文献[1,2]也支持这种做法。 + +我们会在文中增加相关讨论。 +``` + +### 2.4 不同意的 + +**策略**: 坚定但有理有据地反驳 + +**模板**: + +``` +我们尊重审稿人的观点,但不同意... + +原因是...(实验证据/理论分析/文献支持) + +我们的方法在这一方面确实有优势... +``` + +--- + +## 3. 常见意见应对模板 + +### 3.1 缺少消融实验 + +``` +感谢审稿人的建议。我们已在补充材料中添加了消融实验[表X], +显示去掉模块A后性能下降Y%,证实了其必要性。 +``` + +### 3.2 对比不公平 + +``` +我们已确保所有方法使用相同的训练设置(学习率、batch size等), +详见补充材料[实验设置]。 + +我们注意到方法Y的原始设置与我们的有所不同, +为了公平对比,我们也用他们的设置重新运行了实验。 +``` + +### 3.3 创新性不足 + +``` +与[ABC方法]不同,我们关注的是X场景下的Y问题, +这在之前工作中未被探索。 + +我们的贡献在于: +1. 发现了Z现象 +2. 提出了W方法 +3. 在N个数据集上验证了有效性 + +相关工作[附表]详细列出了区别。 +``` + +### 3.4 缺少某篇文献 + +``` +感谢审稿人指出这篇重要文献。我们已将其加入相关工作并讨论: + +- 该方法与我们的相似之处:... +- 关键区别:... +- 我们的方法如何扩展了它:... +``` + +### 3.5 结果不够显著 + +``` +我们认为结果的显著性在于: + +1. 在X场景下(之前未被探索),我们的方法优于baseline +2. 消融显示每个模块都有贡献 +3. 在Y个数据集上一致有效 + +虽然绝对提升不大,但在...场景下很有价值。 +``` + +--- + +## 4. Rebuttal 成功要素 + +1. **感谢审稿人**(即使意见尖锐) + +2. **具体修改措施**(不是泛泛而谈) + +3. **实验数据支持**(新增结果) + +4. **保持专业和礼貌** + +--- + +## 5. Rebuttal 结构模板 + +```markdown +# Rebuttal + +## 概述 + +感谢所有审稿人的宝贵意见。我们已认真考虑每条意见, +并准备了相应的修改和补充实验。 + +## 对审稿人A的回应 + +### 意见1: ... +感谢审稿人的建议。[具体回应] + +### 意见2: ... +[回应...] + +## 对审稿人B的回应 + +### 意见1: ... +[回应...] + +## 对审稿人C的回应 + +### 意见1: ... +[回应...] + +## 主要修改总结 + +1. 补充了X个消融实验 +2. 增加了与方法Y的对比 +3. 重写了第Z节以更清晰 + +修改后的全文已附后/已在附件中标注。 + +## 附件 + +- 补充实验结果 +- 修改后的全文(标注版) +``` diff --git a/external/ai-research-ebook/src/styles/custom.css b/external/ai-research-ebook/src/styles/custom.css new file mode 100644 index 0000000..b87b2f2 --- /dev/null +++ b/external/ai-research-ebook/src/styles/custom.css @@ -0,0 +1,794 @@ +:root, +[data-theme='light'] { + --chat-bg-primary: #f7f7f8; + --chat-bg-secondary: #ffffff; + --chat-bg-tertiary: #f0f1f3; + --chat-sidebar-bg: #f9f9fb; + --chat-border: #e3e5e9; + --chat-border-strong: #d1d5db; + --chat-text-primary: #171717; + --chat-text-secondary: #374151; + --chat-text-tertiary: #6b7280; + --chat-link: #2563eb; + --chat-link-hover: #1d4ed8; + --chat-accent: #10a37f; + --chat-accent-hover: #0d8e6f; + --chat-selection: #bfdbfe; + --chat-shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.06); + --chat-shadow-md: 0 10px 24px rgba(15, 23, 42, 0.08); + --chat-radius-sm: 0.375rem; + --chat-radius-md: 0.625rem; + --chat-radius-lg: 0.875rem; + --chat-radius-xl: 1.125rem; + --chat-transition-fast: 0.15s ease; + --chat-transition-normal: 0.25s ease; + --sl-color-accent: var(--chat-accent); + --sl-color-accent-high: var(--chat-accent-hover); + --sl-color-bg: var(--chat-bg-primary); + --sl-color-bg-nav: var(--chat-sidebar-bg); + --sl-color-bg-sidebar: var(--chat-sidebar-bg); + --sl-color-hairline: var(--chat-border); + --sl-color-hairline-light: var(--chat-border); + --sl-color-text: var(--chat-text-primary); + --sl-color-text-accent: var(--chat-accent); + --sl-color-text-muted: var(--chat-text-tertiary); +} + +[data-theme='dark'] { + --chat-bg-primary: #212121; + --chat-bg-secondary: #2f2f2f; + --chat-bg-tertiary: #424242; + --chat-sidebar-bg: #171717; + --chat-border: hsla(0, 0%, 100%, 0.1); + --chat-border-strong: hsla(0, 0%, 100%, 0.2); + --chat-text-primary: #ececec; + --chat-text-secondary: #d1d5db; + --chat-text-tertiary: #9ca3af; + --chat-link: #7ab7ff; + --chat-link-hover: #9cc9ff; + --chat-accent: #19c37d; + --chat-accent-hover: #10a37f; + --chat-selection: #1d4ed8; + --chat-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.28); + --chat-shadow-md: 0 10px 24px rgba(0, 0, 0, 0.32); + --sl-color-accent: var(--chat-accent); + --sl-color-accent-high: var(--chat-accent-hover); + --sl-color-bg: var(--chat-bg-primary); + --sl-color-bg-nav: var(--chat-sidebar-bg); + --sl-color-bg-sidebar: var(--chat-sidebar-bg); + --sl-color-hairline: var(--chat-border); + --sl-color-hairline-light: var(--chat-border); + --sl-color-text: var(--chat-text-primary); + --sl-color-text-accent: var(--chat-accent); + --sl-color-text-muted: var(--chat-text-tertiary); +} + +html, +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + background: var(--chat-bg-primary); + color: var(--chat-text-primary); + line-height: 1.7; +} + +::selection { + background: var(--chat-selection); + color: #ffffff; +} + +:focus-visible { + outline: 2px solid var(--chat-accent); + outline-offset: 2px; +} + +.header { + background: color-mix(in srgb, var(--chat-bg-primary) 92%, transparent); + backdrop-filter: blur(10px); + border-bottom: 1px solid var(--chat-border); +} + +.site-title { + font-weight: 600; + letter-spacing: -0.01em; + color: var(--chat-text-primary); +} + +.sidebar-pane { + background: var(--chat-sidebar-bg) !important; + border-inline-end: 1px solid var(--chat-border) !important; +} + +.sidebar-content a { + color: var(--chat-text-secondary); + padding: 0.5rem 0.875rem; + margin: 0.125rem 0.375rem; + border-radius: var(--chat-radius-md); + transition: background-color var(--chat-transition-fast), color var(--chat-transition-fast); +} + +.sidebar-content a:hover, +.sidebar-content a:focus-visible { + background: var(--chat-bg-tertiary); + color: var(--chat-text-primary); +} + +.sidebar-content [aria-current='page'], +.sidebar-content [aria-current='page']:hover { + background: color-mix(in srgb, var(--chat-accent) 16%, var(--chat-bg-secondary)); + color: var(--chat-accent); + font-weight: 600; +} + +.main-pane { + background: var(--chat-bg-primary); +} + +.main-frame { + background: + radial-gradient(circle at 86% 4%, color-mix(in srgb, var(--chat-accent) 7%, transparent), transparent 32%), + radial-gradient(circle at 8% 12%, color-mix(in srgb, var(--chat-link) 7%, transparent), transparent 28%), + var(--chat-bg-primary); +} + +.content-panel { + background: transparent !important; + border: 0 !important; + box-shadow: none !important; + padding-block: 0.25rem !important; +} + +.sl-container { + max-width: min(76rem, 96vw); +} + +html:not([data-has-hero]) .content-panel .sl-container { + background: var(--chat-bg-secondary); + border: 1px solid var(--chat-border); + border-radius: var(--chat-radius-xl); + box-shadow: var(--chat-shadow-sm); + padding-inline: clamp(1rem, 2vw, 1.35rem); + padding-block: 0.35rem; + margin-bottom: 0.75rem; +} + +html:not([data-has-hero]) .content-panel:first-of-type .sl-container { + padding-top: 0.6rem; + padding-bottom: 0.3rem; +} + +html:not([data-has-hero]) .content-panel:first-of-type h1 { + margin-bottom: 0.2rem; +} + +.sidebar .group-label, +.sidebar .title { + color: var(--chat-text-tertiary); + font-weight: 600; + letter-spacing: 0.01em; +} + +.open-menu, +.close-menu, +.mobile-preferences { + background: var(--chat-bg-secondary); + border: 1px solid var(--chat-border); + border-radius: var(--chat-radius-md); + color: var(--chat-text-secondary); +} + +.mobile-preferences { + padding: 0.4rem 0.6rem; + gap: 0.5rem; +} + +.right-sidebar-container { + background: color-mix(in srgb, var(--chat-bg-secondary) 76%, transparent); + border-inline-start: 1px solid var(--chat-border); +} + +.right-sidebar-panel .sl-container { + padding-top: 0.5rem; +} + +@keyframes hero-fade-in { + 0% { + opacity: 0; + transform: translateY(14px) scale(0.995); + } + 100% { + opacity: 1; + transform: translateY(0) scale(1); + } +} + +@keyframes hero-float-left { + 0%, + 100% { + transform: translate3d(0, 0, 0); + } + 50% { + transform: translate3d(8px, -10px, 0); + } +} + +@keyframes hero-float-right { + 0%, + 100% { + transform: translate3d(0, 0, 0); + } + 50% { + transform: translate3d(-10px, 9px, 0); + } +} + +@keyframes hero-content-rise { + 0% { + opacity: 0; + transform: translateY(12px); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +.hero { + position: relative; + isolation: isolate; + overflow: hidden; + background: + linear-gradient(122deg, color-mix(in srgb, var(--chat-accent) 9%, transparent), transparent 38%), + linear-gradient(0deg, var(--chat-bg-secondary), var(--chat-bg-secondary)); + border: 1px solid var(--chat-border); + border-radius: var(--chat-radius-xl); + box-shadow: var(--chat-shadow-sm); + padding: 2.75rem 3rem; + margin-bottom: 2rem; + opacity: 0; + transform-origin: center; + animation: hero-fade-in 0.7s cubic-bezier(0.2, 0.8, 0.2, 1) 0.1s forwards; +} + +.hero::before { + content: ''; + position: absolute; + inset: -5rem auto auto -5rem; + width: 13rem; + height: 13rem; + border-radius: 999px; + background: radial-gradient(circle, color-mix(in srgb, var(--chat-link) 20%, transparent), transparent 72%); + filter: blur(1px); + pointer-events: none; + z-index: -1; + animation: hero-float-left 8.8s ease-in-out infinite; +} + +.hero::after { + content: ''; + position: absolute; + inset: auto -4rem -5rem auto; + width: 14rem; + height: 14rem; + border-radius: 999px; + background: radial-gradient(circle, color-mix(in srgb, var(--chat-accent) 20%, transparent), transparent 70%); + filter: blur(1px); + pointer-events: none; + z-index: -1; + animation: hero-float-right 10.4s ease-in-out infinite; +} + +.hero .copy, +.hero .actions { + opacity: 0; + transform: translateY(10px); + animation: hero-content-rise 0.6s cubic-bezier(0.22, 0.83, 0.19, 0.99) forwards; +} + +.hero .copy { + animation-delay: 0.24s; +} + +.hero .actions { + animation-delay: 0.36s; +} + +.hero h1 { + font-size: clamp(2rem, 3.4vw, 2.8rem); + font-weight: 700; + letter-spacing: -0.02em; + color: var(--chat-text-primary); +} + +.hero .tagline { + color: var(--chat-text-secondary); + font-size: 1.08rem; + max-width: 58ch; +} + +.hero .actions .sl-link-button { + border-radius: 999px; + padding: 0.7rem 1.25rem; + font-weight: 600; + transition: transform var(--chat-transition-fast), box-shadow var(--chat-transition-fast), background-color var(--chat-transition-fast); +} + +.hero .actions .sl-link-button.primary { + background: var(--chat-accent); + border-color: var(--chat-accent); + color: #ffffff; + box-shadow: 0 8px 16px color-mix(in srgb, var(--chat-accent) 34%, transparent); +} + +.hero .actions .sl-link-button.primary:hover { + background: var(--chat-accent-hover); + border-color: var(--chat-accent-hover); + transform: translateY(-1px); +} + +.hero .actions .sl-link-button.minimal, +.hero .actions .sl-link-button.secondary { + border-color: var(--chat-border-strong); + color: var(--chat-text-primary); + background: transparent; +} + +.hero .actions .sl-link-button.minimal:hover, +.hero .actions .sl-link-button.secondary:hover { + background: var(--chat-bg-tertiary); + transform: translateY(-1px); +} + +.sl-markdown-content { + max-width: 74ch; + color: var(--chat-text-primary); +} + +.sl-markdown-content :is(h1, h2, h3, h4, h5, h6) { + color: var(--chat-text-primary); + font-weight: 650; + letter-spacing: -0.01em; + scroll-margin-top: 6rem; +} + +.sl-markdown-content h2 { + border-bottom: 1px solid var(--chat-border); + padding-bottom: 0.5rem; + margin-top: 2rem; + margin-bottom: 1rem; +} + +.sl-heading-wrapper { + gap: 0.35rem; +} + +.sl-anchor-link { + opacity: 0; + transform: translateX(-2px); + transition: opacity var(--chat-transition-fast), transform var(--chat-transition-fast); +} + +.sl-heading-wrapper:hover .sl-anchor-link, +.sl-heading-wrapper:focus-within .sl-anchor-link { + opacity: 1; + transform: translateX(0); +} + +.sl-markdown-content p, +.sl-markdown-content li, +.sl-markdown-content td { + color: var(--chat-text-secondary); +} + +.sl-markdown-content ul, +.sl-markdown-content ol { + padding-inline-start: 1.2rem; + margin-block: 0.7rem; +} + +.sl-markdown-content li + li { + margin-top: 0.2rem; +} + +.sl-markdown-content strong { + color: var(--chat-text-primary); + font-weight: 650; +} + +.sl-markdown-content a { + color: var(--chat-link); + text-decoration: none; + transition: color var(--chat-transition-fast); +} + +.sl-markdown-content a:hover { + color: var(--chat-link-hover); + text-decoration: underline; +} + +.sl-markdown-content hr { + border: none; + border-top: 1px solid var(--chat-border); + margin-block: 2rem; +} + +.sl-markdown-content blockquote { + border-inline-start: 3px solid var(--chat-accent); + background: color-mix(in srgb, var(--chat-accent) 10%, var(--chat-bg-secondary)); + padding: 0.8rem 1rem; + border-radius: 0 var(--chat-radius-md) var(--chat-radius-md) 0; + color: var(--chat-text-secondary); +} + +.sl-markdown-content details { + background: var(--chat-bg-secondary); + border: 1px solid var(--chat-border); + border-radius: var(--chat-radius-md); + padding: 0.75rem 0.9rem; + margin-block: 1rem; +} + +.sl-markdown-content .tip, +.sl-markdown-content .warning { + border-radius: var(--chat-radius-md); + border: 1px solid var(--chat-border); + padding: 0.75rem 0.95rem; + margin: 1rem 0; + box-shadow: var(--chat-shadow-sm); +} + +.sl-markdown-content .tip { + background: color-mix(in srgb, var(--chat-accent) 9%, var(--chat-bg-secondary)); + border-inline-start: 3px solid var(--chat-accent); +} + +.sl-markdown-content .warning { + background: color-mix(in srgb, #f59e0b 10%, var(--chat-bg-secondary)); + border-inline-start: 3px solid #f59e0b; +} + +.sl-markdown-content .contains-task-list { + list-style: none; + padding-inline-start: 0; +} + +.sl-markdown-content .task-list-item { + display: flex; + align-items: flex-start; + gap: 0.55rem; + padding: 0.15rem 0; +} + +.sl-markdown-content .task-list-item input[type='checkbox'] { + accent-color: var(--chat-accent); + margin-top: 0.2rem; +} + +.sl-markdown-content table { + border: 1px solid var(--chat-border); + border-radius: var(--chat-radius-md); + overflow: hidden; + background: var(--chat-bg-secondary); + box-shadow: var(--chat-shadow-sm); +} + +.sl-markdown-content th { + background: var(--chat-bg-tertiary); + border-bottom: 1px solid var(--chat-border); + color: var(--chat-text-primary); + font-weight: 600; + padding: 0.8rem 1rem; +} + +.sl-markdown-content td { + border-bottom: 1px solid var(--chat-border); + padding: 0.8rem 1rem; +} + +.sl-markdown-content tbody tr:hover td { + background: color-mix(in srgb, var(--chat-bg-tertiary) 55%, transparent); +} + +.sl-markdown-content code:not(pre code) { + background: var(--chat-bg-tertiary); + border: 1px solid var(--chat-border); + padding: 0.12rem 0.4rem; + border-radius: var(--chat-radius-sm); + font-size: 0.9em; + color: var(--chat-accent); +} + +.expressive-code, +.sl-markdown-content pre { + border: 1px solid var(--chat-border) !important; + border-radius: var(--chat-radius-md) !important; + background: var(--chat-bg-secondary) !important; + box-shadow: var(--chat-shadow-sm) !important; +} + +.expressive-code .copy button { + background: var(--chat-bg-tertiary) !important; + border: 1px solid var(--chat-border) !important; + border-radius: var(--chat-radius-sm) !important; + color: var(--chat-text-secondary) !important; +} + +.expressive-code .copy button:hover { + color: var(--chat-text-primary) !important; + border-color: var(--chat-border-strong) !important; +} + +.card-grid { + gap: 0.9rem; + margin-block: 1.4rem; +} + +.card-grid > * { + background: var(--chat-bg-secondary); + border: 1px solid var(--chat-border); + border-radius: var(--chat-radius-lg); + padding: 1rem; + box-shadow: var(--chat-shadow-sm); + transition: transform var(--chat-transition-fast), border-color var(--chat-transition-fast), box-shadow var(--chat-transition-fast); +} + +.card-grid > *:hover { + transform: translateY(-2px); + border-color: var(--chat-border-strong); + box-shadow: var(--chat-shadow-md); +} + +.right-sidebar-panel { + border-inline-start: 1px solid var(--chat-border); + background: transparent; +} + +starlight-toc nav h2 { + color: var(--chat-text-tertiary); + font-weight: 600; + letter-spacing: 0; +} + +starlight-toc a { + color: var(--chat-text-tertiary); + border-radius: var(--chat-radius-sm); + transition: color var(--chat-transition-fast), background-color var(--chat-transition-fast); +} + +starlight-toc a:hover { + color: var(--chat-text-primary); + background: var(--chat-bg-tertiary); +} + +starlight-toc a[aria-current='true'] { + color: var(--chat-accent); + font-weight: 600; +} + +.right-sidebar-panel starlight-toc nav { + background: var(--chat-bg-secondary); + border: 1px solid var(--chat-border); + border-radius: var(--chat-radius-lg); + padding: 0.8rem; + box-shadow: var(--chat-shadow-sm); +} + +button[data-open-modal], +.search-button { + background: var(--chat-bg-secondary) !important; + border: 1px solid var(--chat-border) !important; + color: var(--chat-text-secondary) !important; + border-radius: var(--chat-radius-md) !important; + transition: all var(--chat-transition-fast); +} + +button[data-open-modal]:hover, +.search-button:hover { + background: var(--chat-bg-tertiary) !important; + border-color: var(--chat-border-strong) !important; + color: var(--chat-text-primary) !important; +} + +.pagination-links a { + background: var(--chat-bg-secondary); + border: 1px solid var(--chat-border); + border-radius: var(--chat-radius-lg); + box-shadow: var(--chat-shadow-sm); + transition: transform var(--chat-transition-fast), border-color var(--chat-transition-fast), box-shadow var(--chat-transition-fast); +} + +.pagination-links a:hover { + transform: translateY(-2px); + border-color: var(--chat-border-strong); + box-shadow: var(--chat-shadow-md); +} + +.pagination-links .link-title { + color: var(--chat-text-primary); +} + +starlight-theme-select { + --theme-button-border: var(--chat-border); + --theme-button-bg: var(--chat-bg-secondary); + --theme-button-text: var(--chat-text-secondary); + --theme-button-hover-bg: var(--chat-bg-tertiary); + --theme-button-hover-text: var(--chat-text-primary); +} + +footer { + border-top: 1px solid var(--chat-border); + padding-top: 1.75rem; + margin-top: 2.25rem; + color: var(--chat-text-tertiary); +} + +.index-highlights { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); + gap: 0.75rem; + margin: 1.2rem 0 1.8rem; + padding: 0; +} + +.index-highlights > li { + list-style: none; + padding: 0.85rem 1rem; + border: 1px solid var(--chat-border); + border-radius: var(--chat-radius-lg); + background: var(--chat-bg-secondary); + color: var(--chat-text-secondary); + box-shadow: var(--chat-shadow-sm); +} + +.index-footnote { + margin-top: 2.4rem; + padding-top: 1rem; + border-top: 1px solid var(--chat-border); + text-align: center; + font-size: 0.9rem; + color: var(--chat-text-tertiary); +} + +.mermaid-source-hidden { + display: none !important; +} + +.mermaid-diagram { + margin: 1rem 0 1.5rem; + padding: 1rem; + border: 1px solid var(--chat-border); + border-radius: var(--chat-radius-lg); + background: var(--chat-bg-secondary); + overflow-x: auto; + box-shadow: var(--chat-shadow-sm); +} + +.mermaid-diagram .mermaid { + min-width: max-content; + text-align: center; +} + +.mermaid-diagram svg { + max-width: none; + height: auto; + display: block; + margin-inline: auto; +} + +@media (max-width: 72rem) { + html:not([data-has-hero]) .content-panel .sl-container { + border-radius: var(--chat-radius-lg); + padding-inline: 0.85rem; + } + + .right-sidebar-container { + border-inline-start: 0; + background: transparent; + } + + .hero { + padding: 1.35rem; + border-radius: var(--chat-radius-lg); + } + + .hero h1 { + font-size: clamp(1.7rem, 7vw, 2.1rem); + } + + .hero .tagline { + font-size: 0.98rem; + } + + .hero .actions { + display: grid; + grid-template-columns: 1fr; + gap: 0.6rem; + } + + .hero .actions .sl-link-button { + width: 100%; + justify-content: center; + } + + .sl-markdown-content { + max-width: 100%; + } + + .sl-markdown-content table { + display: block; + overflow-x: auto; + white-space: nowrap; + } + + .sl-markdown-content th, + .sl-markdown-content td { + padding: 0.68rem 0.8rem; + } + + .index-highlights { + grid-template-columns: 1fr; + margin: 1rem 0 1.35rem; + } + + .mermaid-diagram { + margin: 0.85rem 0 1.2rem; + padding: 0.75rem; + } + + .pagination-links a { + padding-block: 0.72rem; + } + + .open-menu, + .close-menu { + min-height: 2.35rem; + min-width: 2.35rem; + } + + .right-sidebar-panel { + border-inline-start: 0; + } +} + +@media (max-width: 50rem) { + html { + font-size: 15px; + } + + .content-panel { + padding-block: 0.1rem !important; + } + + .sl-markdown-content h2 { + font-size: 1.26rem; + } + + .sl-markdown-content h3 { + font-size: 1.08rem; + } + + button[data-open-modal] { + min-height: 2.35rem; + } + + .sidebar-pane { + padding-bottom: 0.45rem; + } +} + +@media (prefers-reduced-motion: reduce) { + .hero, + .hero::before, + .hero::after, + .hero .copy, + .hero .actions { + animation: none !important; + opacity: 1 !important; + transform: none !important; + } + + .card-grid > *, + .pagination-links a, + .hero .actions .sl-link-button { + transition: none !important; + } +} diff --git a/external/ai-research-ebook/tsconfig.json b/external/ai-research-ebook/tsconfig.json new file mode 100644 index 0000000..8bf91d3 --- /dev/null +++ b/external/ai-research-ebook/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"] +} diff --git a/index.html b/index.html index b0b91d7..799f8f3 100644 --- a/index.html +++ b/index.html @@ -1016,6 +1016,7 @@

📚 核心内容

技术栈与框架 系统设计与实战 面试指南 + 🔬 AI科研指南 (Vibe Research)