commit 7d5c5e4c54eddae18fa8fab8412591dffe3329c3 Author: wuyang <5700876+banisherwy@user.noreply.gitee.com> Date: Tue Jul 28 21:55:19 2026 +0800 feat: launch LLM Atlas research course diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..b0f0561 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +node_modules +dist +.astro +.git +research/sources +*.log diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..44318fa --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +node_modules/ +dist/ +.astro/ +.DS_Store +*.log + +# Local primary-source cache. The public repository stores canonical URLs, +# checksums and research notes instead of redistributing downloaded papers. +research/sources/**/*.pdf +research/sources/**/*.txt +research/sources/**/*.html diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..03d4d16 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM node:22-alpine AS build +WORKDIR /app +COPY --chmod=0644 package.json package-lock.json ./ +RUN npm ci +COPY --chmod=0644 . . +RUN npm run build + +FROM nginx:1.29-alpine +COPY --chmod=0644 deploy/nginx.conf /etc/nginx/conf.d/default.conf +COPY --chmod=0644 --from=build /app/dist/ /usr/share/nginx/html/ +EXPOSE 8080 +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ + CMD wget -q -O /dev/null http://127.0.0.1:8080/healthz || exit 1 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d885821 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 LLM Atlas contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/PROGRESS.md b/PROGRESS.md new file mode 100644 index 0000000..a859435 --- /dev/null +++ b/PROGRESS.md @@ -0,0 +1,54 @@ +# 持续进度 + +最后更新:2026-07-28 + +## 总体状态 + +| 工作流 | 状态 | 完成度 | 下一检查点 | +|---|---:|---:|---| +| 研究框架与规范 | 进行中 | 72% | 给 125 篇索引补充逐篇精读层级 | +| 网站设计系统 | 进行中 | 86% | 打印样式与更多通用可视化组件 | +| Kimi K3 深读 | 进行中 | 55% | 扩写 scaling / infra 逐图笔记 | +| Transformer 基础 | 进行中 | 52% | 矩阵形状动画与手算练习 | +| DeepSeek 专题 | 进行中 | 54% | MLA 与 GRPO 完整公式推导 | +| 引用与事实检查 | 进行中 | 48% | 自动化外链复查与来源等级扩展 | +| 开源仓库 | 待开始 | 0% | 首次提交并推送到 git.k1412.top | +| k1412 部署 | 待开始 | 0% | 首个公开预览与 HTTPS 验证 | + +## 已完成 + +- [x] 建立长期任务目标与阶段计划。 +- [x] 确认 K3 官方 47 页技术报告与官方模型仓库。 +- [x] 提取技术报告目录与 151 条参考来源,建立本地只读研究缓存。 +- [x] 从报告反推出 16 个专题与三条贯穿案例。 +- [x] 提炼参考网站的编辑设计语言。 +- [x] 确认 `git.k1412.top` 为 Gitea/Forgejo 兼容服务且本机 HTTPS 凭据可用于既有仓库。 +- [x] 使用 Grok CLI 检索并形成约 95 篇一手论文的补充路线,主代理已回查关键来源。 +- [x] 完成首批 125 篇关键论文索引,覆盖 12 个专题与 Kimi/DeepSeek 聚光主线。 +- [x] 完成可检索、可按专题筛选的论文库页面。 +- [x] 完成 K3、Transformer 基础与 DeepSeek 三篇首版长文。 +- [x] 完成 K3 三轴架构、Self-Attention 实验与 DeepSeek 谱系三张原创交互图。 +- [x] Astro 类型检查、生产构建、7 个内部路由和桌面/移动端视觉检查通过。 + +## 正在进行 + +- [ ] 开源仓库首次提交与远端公开验证。 +- [ ] 不可变容器镜像、NAS Compose Manager 部署与 HTTPS 验证。 +- [ ] 长上下文 / 高效注意力专题深度正文。 +- [ ] MoE 路由模拟器与通信成本账本。 + +## 研究账本 + +| 日期 | 决策/发现 | 影响 | +|---|---|---| +| 2026-07-28 | 网站命名为 **LLM Atlas / 大模型技术全景** | 既能容纳 K3 深读,也能承载完整 LLM 课程 | +| 2026-07-28 | K3 作为“汇流点”,不是课程起点 | 初学者可以先学基础,高阶读者可以从 K3 反向跳转 | +| 2026-07-28 | 优先重绘论文图并标明“简化/改绘” | 图可缩放、可交互,也减少脱离上下文复制论文图片 | +| 2026-07-28 | Grok 只用于线索扩展与交叉检查 | 正文事实必须回到论文、官方仓库或正式文档 | +| 2026-07-28 | 首批论文库收录 125 篇,按问题与专题多标签组织 | 论文库承担发现入口,专题正文承担深度精读与机制复核 | + +## 未决问题 + +- K3 报告给出了多项公开组件的整合方式;独立论文与 K3 内部最终实现之间仍需逐项对照。 +- 公开技术报告不会披露完整数据配比和训练细节;网站会把“已知”“合理推断”“未知”分开。 +- 2026 年模型与榜单变化快,所有动态比较都必须带研究截止日期。 diff --git a/README.md b/README.md new file mode 100644 index 0000000..ed5eafb --- /dev/null +++ b/README.md @@ -0,0 +1,41 @@ +# LLM Atlas + +一套以 Kimi K3 技术报告为锚点、从第一性原理重新梳理大语言模型技术发展的中文开放课程。 + +项目不把论文按年份堆成目录,而是持续回答四个问题: + +1. 当时真正卡住研究者的问题是什么? +2. 旧方法为什么不够? +3. 关键论文改变了哪个假设或工程瓶颈? +4. 这条思路如何汇入今天的 Kimi K3、DeepSeek 与前沿 Agent 系统? + +## 当前交付 + +- 网站:`https://llm-atlas.k1412.top/`(首次发布后生效) +- 开源仓库:`https://git.k1412.top/wuyang/llm-atlas`(首次推送后生效) +- 研究路线:[ROADMAP.md](./ROADMAP.md) +- 持续进度:[PROGRESS.md](./PROGRESS.md) +- 证据与写作规范:[research/METHODOLOGY.md](./research/METHODOLOGY.md) + +首个里程碑包含 16 专题学习地图、125 篇关键论文索引、Kimi K3 完整导读、 +Transformer 基础、DeepSeek 技术谱系,以及三张原创交互可视化。其余专题按进度账本持续扩建。 + +## 本地开发 + +```bash +npm install +npm run dev +``` + +生产构建与检查: + +```bash +npm run check +npm run build +``` + +## 内容与代码许可 + +- 网站代码采用 MIT License。 +- 原创文字与重绘图采用 [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.zh-hans)。 +- 被引用论文、图表、模型与商标仍归各自权利人所有;项目优先链接一手来源,并明确标注改绘与推断。 diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..81bece4 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,101 @@ +# LLM Atlas 总体研究地图 + +最后更新:2026-07-28 + +## 组织原则 + +全站采用“问题链”而不是“名词表”: + +> 现象与直觉 → 最小数学模型 → 旧方案瓶颈 → 关键论文 → 架构图/实验 → 与后继工作的桥 → K3/DeepSeek 中的落点 → 局限与开放问题 + +难度分为四层: + +- **L0 直觉**:不要求线性代数,先建立可视化心智模型。 +- **L1 机制**:理解张量形状、训练目标与计算流程。 +- **L2 论文**:能读关键公式、消融实验和训练配置。 +- **L3 工程**:理解并行、通信、显存、精度与服务系统。 + +## 16 个专题 + +### 00. 导航:先看懂一张大模型地图 + +学习依赖、术语、读论文方法、证据等级、K3 的全局坐标。 + +### 01. 语言模型从哪里来 + +N-gram → 神经概率语言模型 → 分布式词表示 → RNN/LSTM → Seq2Seq。解释“预测下一个词”为何最终能长成通用模型。 + +### 02. 注意力与 Transformer + +Bahdanau Attention → Self-Attention → Transformer → decoder-only GPT。逐项拆解 Q/K/V、因果掩码、多头、残差、归一化、FFN。 + +### 03. 表示层、位置与残差高速公路 + +BPE/SentencePiece、绝对/相对位置、RoPE/ALiBi、LayerNorm/RMSNorm、Pre-LN、SwiGLU,以及从 ResNet 到 K3 Attention Residuals 的深度信息流。 + +### 04. Scaling Laws:规模为什么有效 + +GPT 系列 → Kaplan scaling laws → Chinchilla compute-optimal → 数据质量与重复 → 推理时计算。区分参数、激活参数、训练 FLOPs 与能力。 + +### 05. 数据工程与预训练配方 + +采集、清洗、去重、质量分类、数据混合、课程学习、合成数据、污染控制;对公开报告中“没有说”的部分也明确标记。 + +### 06. 稀疏计算与 MoE + +Conditional Computation → Sparsely-Gated MoE → GShard/Switch → DeepSeekMoE → LatentMoE → K3 Stable LatentMoE。重点解释路由、专家特化、负载均衡与通信。 + +### 07. 长上下文与高效注意力 + +稀疏注意力、线性注意力、FlashAttention、MQA/GQA、MLA、状态空间模型、Delta Rule、Kimi Linear/KDA、混合注意力与 1M 上下文。 + +### 08. 大规模训练系统 + +数据/张量/流水线/序列/上下文/专家并行,ZeRO,Megatron,通信重叠,容错;对比 DeepSeek DualPipe/DeepEP 与 K3 MoonEP。 + +### 09. 数值精度、优化器与稳定性 + +Adam/AdamW、Adafactor、μP、Muon;FP16/BF16/FP8/MXFP4、量化感知训练、缩放与误差。重点讲 DeepSeek-V3 FP8 与 K3 per-head Muon/MXFP4。 + +### 10. 指令微调与人类偏好 + +Instruction Tuning、SFT、RLHF/PPO、RLAIF、Constitutional AI、DPO 及其后续。解释 base model 如何变成可协作助手。 + +### 11. 推理模型与测试时扩展 + +CoT、自洽性、搜索、验证器、过程奖励、GRPO、DeepSeekMath、DeepSeek-R1/R1-Zero、Kimi k1.5、multi-effort RL 与 on-policy distillation。 + +### 12. 工具使用与长程 Agent + +WebGPT、Toolformer、ReAct、Reflexion、代码 Agent、Computer Use、环境奖励、可验证任务、沙箱、百万 Token 轨迹与 K3 Agentic RL。 + +### 13. 原生多模态 + +ViT/CLIP → Flamingo/BLIP-2/LLaVA → 原生多模态与视频;Kimi-VL、MoonViT-V2 和“视觉进入同一主干”的意义。 + +### 14. 推理服务与低成本部署 + +KV Cache、PagedAttention/vLLM、连续批处理、推测解码、Prefill/Decode 解耦、前缀缓存、集群调度;Mooncake 与 K3 KDA-aware serving。 + +### 15. 评测、安全与“到底强不强” + +困惑度到 MMLU/GPQA/HLE,SWE-bench、OSWorld、BrowseComp;污染、harness、工具预算、LLM-as-a-judge、选择性报告与网络安全边界。 + +## 三条贯穿式案例 + +1. **Kimi K3 解剖**:把上述全部专题重新汇总到一张架构与训练系统图。 +2. **DeepSeek 技术谱系**:DeepSeek LLM → DeepSeekMoE → V2/MLA → V3/FP8/MTP/DualPipe → Math/GRPO → R1 → V3.2/DSA → V4 长上下文。 +3. **“一个 Token 的旅行”**:从文本分词,经注意力、MoE、GPU 集群、后训练,再到线上推理与工具调用。 + +## 完成标准 + +每个专题至少包含: + +- 1 条清晰问题链; +- 8–20 篇一手论文; +- 2 个以上可缩放架构图; +- 1 个交互演示或逐步动画; +- 1 个“常见误解”区; +- 1 个 K3 与 DeepSeek 对照落点; +- 所有外部事实的可点击来源、研究截止日期与证据等级; +- 独立技术复核与链接检查。 diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 0000000..c356c00 --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,9 @@ +import { defineConfig } from "astro/config"; +import sitemap from "@astrojs/sitemap"; + +export default defineConfig({ + site: "https://llm-atlas.k1412.top", + output: "static", + trailingSlash: "always", + integrations: [sitemap()] +}); diff --git a/deploy/nginx.conf b/deploy/nginx.conf new file mode 100644 index 0000000..b73aed9 --- /dev/null +++ b/deploy/nginx.conf @@ -0,0 +1,26 @@ +server { + listen 8080; + listen [::]:8080; + server_name _; + root /usr/share/nginx/html; + index index.html; + + charset utf-8; + server_tokens off; + + location = /healthz { + access_log off; + default_type text/plain; + return 200 "ok\n"; + } + + location ~* \.(?:css|js|svg|png|jpg|jpeg|webp|woff2)$ { + expires 7d; + add_header Cache-Control "public, max-age=604800, immutable"; + try_files $uri =404; + } + + location / { + try_files $uri $uri/ $uri/index.html =404; + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..fad5bc1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4933 @@ +{ + "name": "llm-atlas", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "llm-atlas", + "version": "0.1.0", + "dependencies": { + "@astrojs/sitemap": "3.7.3", + "astro": "7.1.4" + }, + "devDependencies": { + "@astrojs/check": "0.9.6", + "typescript": "5.9.3" + } + }, + "node_modules/@astrojs/check": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.9.6.tgz", + "integrity": "sha512-jlaEu5SxvSgmfGIFfNgcn5/f+29H61NJzEMfAZ82Xopr4XBchXB1GVlcJsE+elUlsYSbXlptZLX+JMG3b/wZEA==", + "dev": true, + "dependencies": { + "@astrojs/language-server": "^2.16.1", + "chokidar": "^4.0.1", + "kleur": "^4.1.5", + "yargs": "^17.7.2" + }, + "bin": { + "astro-check": "bin/astro-check.js" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } + }, + "node_modules/@astrojs/compiler": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz", + "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==", + "dev": true + }, + "node_modules/@astrojs/compiler-binding": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding/-/compiler-binding-0.3.1.tgz", + "integrity": "sha512-DaAUj29AIBU2XdJ8uwcab8lW5O2pk9pY8AXkcMw0sw77nVa3oeTYRcO+Dvbbpoexf6ThMc0FMWYCQ/wN1/T7oQ==", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@astrojs/compiler-binding-darwin-arm64": "0.3.1", + "@astrojs/compiler-binding-darwin-x64": "0.3.1", + "@astrojs/compiler-binding-linux-arm64-gnu": "0.3.1", + "@astrojs/compiler-binding-linux-arm64-musl": "0.3.1", + "@astrojs/compiler-binding-linux-x64-gnu": "0.3.1", + "@astrojs/compiler-binding-linux-x64-musl": "0.3.1", + "@astrojs/compiler-binding-wasm32-wasi": "0.3.1", + "@astrojs/compiler-binding-win32-arm64-msvc": "0.3.1", + "@astrojs/compiler-binding-win32-x64-msvc": "0.3.1" + } + }, + "node_modules/@astrojs/compiler-binding-darwin-arm64": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-arm64/-/compiler-binding-darwin-arm64-0.3.1.tgz", + "integrity": "sha512-IEmEF2fUIlTHtpeE/isyEGVOB14cEyh/LZOFYt6wn3jNyVpdC8aR5OZ+RzFUR/f+8ZDM1LaMwZKvoA7eMyJeFw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-darwin-x64": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-x64/-/compiler-binding-darwin-x64-0.3.1.tgz", + "integrity": "sha512-GF2kIxjpPDLsn94zbZNMsxEmkU828QqnmM7kiQJnaooS3jmI+I7kk6+oI6EpwOsK3femCMdcm+wmOsEqtGrmjQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-arm64-gnu": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-gnu/-/compiler-binding-linux-arm64-gnu-0.3.1.tgz", + "integrity": "sha512-XJL3SDmOtVrqFhCirNcHwE91+IesJqlgNo23I4qW9QUYfwzm/TBZuH61fgqsb1ttgR1mMYz6ooPWs0JDhwMqpQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-arm64-musl": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-musl/-/compiler-binding-linux-arm64-musl-0.3.1.tgz", + "integrity": "sha512-xqE8BVbDoBueK/B47w30PtkVofUWJKGkwoMVE+EOMLf11rnoANxIAdA9FPqY+rng4oNI5ndHGsri1yPj2k8vZQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-x64-gnu": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-gnu/-/compiler-binding-linux-x64-gnu-0.3.1.tgz", + "integrity": "sha512-1y0StU1qiCuDFH3rmbRJXcxdfHxFPrES1Rd+RLffosvUR7I2cH5SF5SFnBN9vXpzpkmyElZm3Yr47iJBPN7vVA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-x64-musl": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-musl/-/compiler-binding-linux-x64-musl-0.3.1.tgz", + "integrity": "sha512-16q0fYf7kpbmdObZEeZJEup8hQv/whgNwVjrSvT8umrKwLDSnNIWiQpm09lQQu6bweZB0XyIvHwlPitvJhC+hg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-wasm32-wasi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-wasm32-wasi/-/compiler-binding-wasm32-wasi-0.3.1.tgz", + "integrity": "sha512-cB456shIwDv/PrVT+2QG7LFndpHkVge5HjqADKZgGaAc9JHVktCtjSrcdkRQ+3tbkPazNKaTLRjXLIiz2NIx9g==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@astrojs/compiler-binding-win32-arm64-msvc": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-arm64-msvc/-/compiler-binding-win32-arm64-msvc-0.3.1.tgz", + "integrity": "sha512-ur/9+If/yTE69mmeX5MqSZndL0HOyx67GeNZUy3N7wVdWpLz9UTJXwyWS4UR2PUQHitghjsM5xoX0Ge56WRVQQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-win32-x64-msvc": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-x64-msvc/-/compiler-binding-win32-x64-msvc-0.3.1.tgz", + "integrity": "sha512-k0W+kDBzDkNZOqu4kElDvCOIbKw5Ut9S1WZ1Krj3KTgNuBERNKXsMMsRLLcbgfdMdbe7bTekQLshZrrvmYpmwA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-rs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-rs/-/compiler-rs-0.3.1.tgz", + "integrity": "sha512-aT7xkgsbNoS6nriY5qKpbihK43slFHO41iqgHCTdOvn1ifaQxLCc5yXy+6GzAtiafoaC1zA7OwVXCXMsvUZOkg==", + "dependencies": { + "@astrojs/compiler-binding": "0.3.1" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.10.1.tgz", + "integrity": "sha512-5phcroT/vmOOrYuuAxtkbPixy5hePtlz9i8K4OeDv3dNK6/UQRuXPOSRTxIOBbUY5Sonw2UaxjbuVc43Mcir6Q==", + "dependencies": { + "@types/hast": "^3.0.4", + "@types/mdast": "^4.0.4", + "js-yaml": "^4.1.1", + "picomatch": "^4.0.4", + "retext-smartypants": "^6.2.0", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "unified": "^11.0.5" + } + }, + "node_modules/@astrojs/language-server": { + "version": "2.16.13", + "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.16.13.tgz", + "integrity": "sha512-ekOa+CYprEq5n4EJC1qTIAhLk49HZIUQuFwrEuF+3JK/pdMaYnWoREFUI2A0KEPOJiFA2kamBzKzbYljDvUxLg==", + "dev": true, + "dependencies": { + "@astrojs/compiler": "^2.13.1", + "@astrojs/yaml2ts": "^0.2.4", + "@jridgewell/sourcemap-codec": "^1.5.5", + "@volar/kit": "~2.4.28", + "@volar/language-core": "~2.4.28", + "@volar/language-server": "~2.4.28", + "@volar/language-service": "~2.4.28", + "muggle-string": "^0.4.1", + "tinyglobby": "^0.2.16", + "volar-service-css": "0.0.71", + "volar-service-emmet": "0.0.71", + "volar-service-html": "0.0.71", + "volar-service-prettier": "0.0.71", + "volar-service-typescript": "0.0.71", + "volar-service-typescript-twoslash-queries": "0.0.71", + "volar-service-yaml": "0.0.71", + "vscode-html-languageservice": "^5.6.2", + "vscode-uri": "^3.1.0" + }, + "bin": { + "astro-ls": "bin/nodeServer.js" + }, + "peerDependencies": { + "prettier": "^3.0.0", + "prettier-plugin-astro": ">=0.11.0" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + } + } + }, + "node_modules/@astrojs/markdown-satteri": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.3.4.tgz", + "integrity": "sha512-6Lvt/bQZEBW+zzdhPblvfZEy5PGEYJaUsUqaCgwHeRPxZJL1gc9I+DRLKWJjjYTWDzVUTzXlMq4WwSK+X34CVw==", + "dependencies": { + "@astrojs/internal-helpers": "0.10.1", + "@astrojs/prism": "4.0.2", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "satteri": "^0.9.1" + } + }, + "node_modules/@astrojs/prism": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz", + "integrity": "sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.3.tgz", + "integrity": "sha512-f8euLVsyeAmAkSm/1M2Kb8sL8byQmfgbvBNaHFItCheTj/IpiJYSEWVcqDHZ/yEHxiS7+w87mQkzwZaPHmk5GA==", + "dependencies": { + "sitemap": "^9.0.0", + "stream-replace-string": "^2.0.0", + "zod": "^4.3.6" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.3.tgz", + "integrity": "sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==", + "dependencies": { + "ci-info": "^4.4.0", + "dset": "^3.1.4", + "is-docker": "^4.0.0", + "package-manager-detector": "^1.6.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/yaml2ts": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.4.tgz", + "integrity": "sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A==", + "dev": true, + "dependencies": { + "yaml": "^2.8.3" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bruits/satteri-darwin-arm64": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-arm64/-/satteri-darwin-arm64-0.9.5.tgz", + "integrity": "sha512-iw4nZgx9v30lWo/MTngQqi1pI78KI0DnkSm+lVJGYdmPLgAyDNJigVhpG42/Iq55A6c1Ll8q66ljyyRiQUxwow==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@bruits/satteri-darwin-x64": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-x64/-/satteri-darwin-x64-0.9.5.tgz", + "integrity": "sha512-6T26Z5Kf3cFW2PSlk9p7zT7yVxvuBSiJvYyz9u8KjYwMTqZyIDOj2wDyNpxKV4+6yUVG7rddq2QwvG/8LJA2+Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@bruits/satteri-linux-arm64-gnu": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-gnu/-/satteri-linux-arm64-gnu-0.9.5.tgz", + "integrity": "sha512-u51id17uJwNEMK9nBlICsq6U31c+XVqQueVBkwRIzZG+gMpS8TOJctt5h5Wz33Z8xnMdTd+adtACVz0yHgGuOA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-arm64-musl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-musl/-/satteri-linux-arm64-musl-0.9.5.tgz", + "integrity": "sha512-v39HxiwGC5Rqm01HksP6+5Y+xKLPlsuVFgIgpEAo+SiQ22c+mJVhS3u7Z6ePAKdhL5NJoK1xq70kLz3L13AhpQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-x64-gnu": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-gnu/-/satteri-linux-x64-gnu-0.9.5.tgz", + "integrity": "sha512-F3uO8uFp3pAP5ZGXttwvh57GS7s0lL953tnNdyI2gRyP4kOOkp6pyGojNJzCjkDvWI2Cvb9iNrKok3aqQPauAw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-x64-musl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-musl/-/satteri-linux-x64-musl-0.9.5.tgz", + "integrity": "sha512-bicEqglLlz++mWyADaZoP0JY20s4vDfLjaPYgQqC+NI4zZLTOOg1T4GB8aqtc822Pqji8SQBmSrTb7CrP8i08Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-wasm32-wasi": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-wasm32-wasi/-/satteri-wasm32-wasi-0.9.5.tgz", + "integrity": "sha512-zauAuMwfPnKPUkd4AFixRFpXdgKwP2mKgxrIIo2gJzW0/ZneF9dbHnLkojSpaBnCCp7VUL1hIi5WWZvB1CqmAQ==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@bruits/satteri-win32-arm64-msvc": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-arm64-msvc/-/satteri-win32-arm64-msvc-0.9.5.tgz", + "integrity": "sha512-SrfE7NEsgZjBvU3c+RR6oQRu0ToXY5uVJEbieXEF0YTctIV2zAVlbaMjWLts074QCgh3a+XHWkR/lWh2VH2LUg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@bruits/satteri-win32-x64-msvc": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-x64-msvc/-/satteri-win32-x64-msvc-0.9.5.tgz", + "integrity": "sha512-5Kw9ZAtTGS8WHizyn+CJhjjfIQrw+7jcZodpmpXJjefnO15M8UexIi6JR2E5thyvsmHyhL6ZDDMUNR4bKJPd4g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz", + "integrity": "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==", + "dependencies": { + "fontkitten": "^1.0.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@clack/core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.3.tgz", + "integrity": "sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==", + "dependencies": { + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@clack/prompts": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.7.0.tgz", + "integrity": "sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==", + "dependencies": { + "@clack/core": "1.4.3", + "fast-string-width": "^3.0.2", + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@emmetio/abbreviation": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz", + "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==", + "dev": true, + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-abbreviation": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz", + "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==", + "dev": true, + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-parser": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.1.tgz", + "integrity": "sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==", + "dev": true, + "dependencies": { + "@emmetio/stream-reader": "^2.2.0", + "@emmetio/stream-reader-utils": "^0.1.0" + } + }, + "node_modules/@emmetio/html-matcher": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emmetio/html-matcher/-/html-matcher-1.3.0.tgz", + "integrity": "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==", + "dev": true, + "dependencies": { + "@emmetio/scanner": "^1.0.0" + } + }, + "node_modules/@emmetio/scanner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz", + "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==", + "dev": true + }, + "node_modules/@emmetio/stream-reader": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz", + "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==", + "dev": true + }, + "node_modules/@emmetio/stream-reader-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz", + "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==", + "dev": true + }, + "node_modules/@emnapi/core": { + "version": "2.0.0-alpha.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-2.0.0-alpha.3.tgz", + "integrity": "sha512-AZypUeJ/yByuxyS7BlSNRDOMLMlROYtjYdIAuBmJssVz1UJDSeYxLrdizhXCFYhedC5bqd/ASy8EuNXbVVXp9g==", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/wasi-threads": "2.0.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "2.0.0-alpha.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-2.0.0-alpha.3.tgz", + "integrity": "sha512-hFPAhMUjJD9BSyCANEISPOogeXC9Zo9ZQl7L6vKnaVsMkCtzznaW/naYypeyl0Gv5rYfWYsZbpixTMpjDJzQeA==", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-2.0.1.tgz", + "integrity": "sha512-9DsSk+o5NBX0CCJT8s0EROGSGxjR/tKu6aBTaVyq+SjAEQH4XcdcRxPBRzsBLizTTJ49MJjF+jgu3qnO9GLQcQ==", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.3.tgz", + "integrity": "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.3.2" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.3.tgz", + "integrity": "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.3.2" + } + }, + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.3.tgz", + "integrity": "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==", + "optional": true, + "os": [ + "freebsd" + ], + "dependencies": { + "@img/sharp-wasm32": "0.35.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.2.tgz", + "integrity": "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.2.tgz", + "integrity": "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.2.tgz", + "integrity": "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.2.tgz", + "integrity": "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.2.tgz", + "integrity": "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.2.tgz", + "integrity": "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.2.tgz", + "integrity": "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.2.tgz", + "integrity": "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.2.tgz", + "integrity": "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.2.tgz", + "integrity": "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.3.tgz", + "integrity": "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.3.2" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.3.tgz", + "integrity": "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.3.2" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.3.tgz", + "integrity": "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.3.2" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.3.tgz", + "integrity": "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.3.2" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.3.tgz", + "integrity": "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.3.2" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.3.tgz", + "integrity": "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.3.2" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.3.tgz", + "integrity": "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.3.2" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.3.tgz", + "integrity": "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.3.2" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz", + "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.1" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-wasm32/node_modules/@emnapi/runtime": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.3.tgz", + "integrity": "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@img/sharp-wasm32": "0.35.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.3.tgz", + "integrity": "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.3.tgz", + "integrity": "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.3.tgz", + "integrity": "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.0.tgz", + "integrity": "sha512-kDoONqMa+VnZ4vvvu/ZUurpJ4gkZU57e7g69qpNgWhYcZFPUHZM2CEMKm+cG6ufDVALbjMvfmMjFVqaK7uEMnA==", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^2.0.0-alpha.3", + "@emnapi/runtime": "^2.0.0-alpha.3" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==" + }, + "node_modules/@oxc-project/types": { + "version": "0.139.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz", + "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz", + "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz", + "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz", + "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz", + "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz", + "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz", + "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz", + "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz", + "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz", + "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz", + "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz", + "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz", + "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz", + "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz", + "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz", + "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "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/@shikijs/core": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.3.1.tgz", + "integrity": "sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==", + "dependencies": { + "@shikijs/primitive": "4.3.1", + "@shikijs/types": "4.3.1", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.3.1.tgz", + "integrity": "sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ==", + "dependencies": { + "@shikijs/types": "4.3.1", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.6" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.3.1.tgz", + "integrity": "sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg==", + "dependencies": { + "@shikijs/types": "4.3.1", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/langs": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.3.1.tgz", + "integrity": "sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ==", + "dependencies": { + "@shikijs/types": "4.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/primitive": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.3.1.tgz", + "integrity": "sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==", + "dependencies": { + "@shikijs/types": "4.3.1", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/themes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.3.1.tgz", + "integrity": "sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA==", + "dependencies": { + "@shikijs/types": "4.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.3.1.tgz", + "integrity": "sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==" + }, + "node_modules/@volar/kit": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/kit/-/kit-2.4.28.tgz", + "integrity": "sha512-cKX4vK9dtZvDRaAzeoUdaAJEew6IdxHNCRrdp5Kvcl6zZOqb6jTOfk3kXkIkG3T7oTFXguEMt5+9ptyqYR84Pg==", + "dev": true, + "dependencies": { + "@volar/language-service": "2.4.28", + "@volar/typescript": "2.4.28", + "typesafe-path": "^0.2.2", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "dev": true, + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/language-server": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.28.tgz", + "integrity": "sha512-NqcLnE5gERKuS4PUFwlhMxf6vqYo7hXtbMFbViXcbVkbZ905AIVWhnSo0ZNBC2V127H1/2zP7RvVOVnyITFfBw==", + "dev": true, + "dependencies": { + "@volar/language-core": "2.4.28", + "@volar/language-service": "2.4.28", + "@volar/typescript": "2.4.28", + "path-browserify": "^1.0.1", + "request-light": "^0.7.0", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@volar/language-service": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.28.tgz", + "integrity": "sha512-Rh/wYCZJrI5vCwMk9xyw/Z+MsWxlJY1rmMZPsxUoJKfzIRjS/NF1NmnuEcrMbEVGja00aVpCsInJfixQTMdvLw==", + "dev": true, + "dependencies": { + "@volar/language-core": "2.4.28", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "dev": true + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dev": true, + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vscode/emmet-helper": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.11.0.tgz", + "integrity": "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==", + "dev": true, + "dependencies": { + "emmet": "^2.4.3", + "jsonc-parser": "^2.3.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.15.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vscode/emmet-helper/node_modules/jsonc-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", + "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", + "dev": true + }, + "node_modules/@vscode/l10n": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz", + "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==", + "dev": true + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "dev": true, + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-i18n": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ajv-i18n/-/ajv-i18n-4.2.0.tgz", + "integrity": "sha512-v/ei2UkCEeuKNXh8RToiFsUclmU+G57LO1Oo22OagNMENIw+Yb8eMwvHu7Vn9fmkjJyv6XclhJ8TbuigSglPkg==", + "dev": true, + "peerDependencies": { + "ajv": "^8.0.0-beta.0" + } + }, + "node_modules/am-i-vibing": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/am-i-vibing/-/am-i-vibing-0.4.0.tgz", + "integrity": "sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==", + "dependencies": { + "process-ancestry": "^0.1.0" + }, + "bin": { + "am-i-vibing": "dist/cli.mjs" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/astro": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/astro/-/astro-7.1.4.tgz", + "integrity": "sha512-e0gkBReJECAZuuTgpEB5JMUc6J4mM6boD6wuVE1pBf/fMywG47f8qm9XQoA6kZB1RWHiHmUlLuQ2jd9Q5+72HQ==", + "dependencies": { + "@astrojs/compiler-rs": "^0.3.1", + "@astrojs/internal-helpers": "0.10.1", + "@astrojs/markdown-satteri": "0.3.4", + "@astrojs/telemetry": "3.3.3", + "@capsizecss/unpack": "^4.0.0", + "@clack/prompts": "^1.1.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "am-i-vibing": "^0.4.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "ci-info": "^4.4.0", + "clsx": "^2.1.1", + "common-ancestor-path": "^2.0.0", + "cookie": "^2.0.1", + "devalue": "^5.8.1", + "diff": "^8.0.3", + "dset": "^3.1.4", + "es-module-lexer": "^2.0.0", + "esbuild": "^0.28.0", + "flattie": "^1.1.1", + "fontace": "~0.4.1", + "get-tsconfig": "5.0.0-beta.4", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "js-yaml": "^4.1.1", + "jsonc-parser": "^3.3.1", + "magic-string": "^1.0.0", + "magicast": "^0.5.2", + "mrmime": "^2.0.1", + "neotraverse": "^1.0.1", + "obug": "^2.1.1", + "p-limit": "^7.3.0", + "p-queue": "^9.1.0", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.4", + "semver": "^7.7.4", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "svgo": "^4.0.1", + "tinyclip": "^0.1.12", + "tinyexec": "^1.0.4", + "tinyglobby": "^0.2.15", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.4", + "unstorage": "^1.17.5", + "vite": "^8.0.13", + "vitefu": "^1.1.2", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^22.0.0", + "zod": "^4.3.6" + }, + "bin": { + "astro": "bin/astro.mjs" + }, + "engines": { + "node": ">=22.12.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0 || ^0.35.0" + }, + "peerDependencies": { + "@astrojs/markdown-remark": "7.2.1" + }, + "peerDependenciesMeta": { + "@astrojs/markdown-remark": { + "optional": true + } + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz", + "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/cookie": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==", + "engines": { + "node": ">=22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz", + "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==" + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "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-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" + }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.2.tgz", + "integrity": "sha512-DObPPAfdtFbXjxLqK8s2Xk9ZuWz5+ZoFEhC7J76es4GU/rEiXwHTmbImoCdyoCOcBH1UF3+Cz6Z2sYD4hyl5TA==" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "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.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "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.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "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.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/emmet": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.11.tgz", + "integrity": "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==", + "dev": true, + "dependencies": { + "@emmetio/abbreviation": "^2.3.3", + "@emmetio/css-abbreviation": "^2.1.8" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", + "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==" + }, + "node_modules/esbuild": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-uri": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz", + "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz", + "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-tsconfig": { + "version": "5.0.0-beta.4", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.4.tgz", + "integrity": "sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "engines": { + "node": ">=20.20.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" + }, + "node_modules/h3": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz", + "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==", + "dependencies": { + "cookie-es": "^1.2.3", + "crossws": "^0.3.5", + "defu": "^6.1.6", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "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.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "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-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "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.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==" + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-docker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-4.0.0.tgz", + "integrity": "sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-yaml": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==" + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.1.0.tgz", + "integrity": "sha512-kS3VHe0nEPST2saQV4Rbkchcd3UBRkVTQHo1D3h/ZTwFDhai/mfKkmtPAtD129EOI7K3HlHIsFOt0WrI2/oU9g==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.3.tgz", + "integrity": "sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==", + "dependencies": { + "@babel/parser": "^7.29.3", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==" + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-1.0.1.tgz", + "integrity": "sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "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.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==" + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "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.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", + "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", + "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", + "dependencies": { + "oniguruma-parser": "^0.12.2", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.1.tgz", + "integrity": "sha512-0trZaiG7Y7kN/Egy9a8j47t9osC0Tch4PaIWd9yGF6bvmlk7muExRvGNYb8sXBwEKMoNKsbNN9P8EefuQekE4Q==", + "dependencies": { + "yocto-queue": "^1.2.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.3.tgz", + "integrity": "sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==", + "dependencies": { + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.8.0.tgz", + "integrity": "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.24.tgz", + "integrity": "sha512-8RyVklq0owXUTa4xlpzu4l9AaVKIdQvAcOHZWaMh98HgySsUtxRVf/chRe3dsSLqb6i40BzGRzEUddRaI+9TSw==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prettier": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", + "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-ancestry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/process-ancestry/-/process-ancestry-0.1.0.tgz", + "integrity": "sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==" + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==" + }, + "node_modules/request-light": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz", + "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==", + "dev": true + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "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/rolldown": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.5.tgz", + "integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==", + "dependencies": { + "@oxc-project/types": "=0.139.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.5", + "@rolldown/binding-darwin-arm64": "1.1.5", + "@rolldown/binding-darwin-x64": "1.1.5", + "@rolldown/binding-freebsd-x64": "1.1.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", + "@rolldown/binding-linux-arm64-gnu": "1.1.5", + "@rolldown/binding-linux-arm64-musl": "1.1.5", + "@rolldown/binding-linux-ppc64-gnu": "1.1.5", + "@rolldown/binding-linux-s390x-gnu": "1.1.5", + "@rolldown/binding-linux-x64-gnu": "1.1.5", + "@rolldown/binding-linux-x64-musl": "1.1.5", + "@rolldown/binding-openharmony-arm64": "1.1.5", + "@rolldown/binding-wasm32-wasi": "1.1.5", + "@rolldown/binding-win32-arm64-msvc": "1.1.5", + "@rolldown/binding-win32-x64-msvc": "1.1.5" + } + }, + "node_modules/satteri": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/satteri/-/satteri-0.9.5.tgz", + "integrity": "sha512-ZuWVl+vnM64y+/TtX8Kosv2c00W+hLQiiwnEL6H0UKVVrxFqMw4D2CJHHQaouVd89OAhtBBfjWLqhKi3TVUV4w==", + "dependencies": { + "@types/estree-jsx": "^1.0.5", + "@types/hast": "^3.0.4", + "@types/mdast": "^4.0.4", + "@types/unist": "^3.0.3" + }, + "optionalDependencies": { + "@bruits/satteri-darwin-arm64": "0.9.5", + "@bruits/satteri-darwin-x64": "0.9.5", + "@bruits/satteri-linux-arm64-gnu": "0.9.5", + "@bruits/satteri-linux-arm64-musl": "0.9.5", + "@bruits/satteri-linux-x64-gnu": "0.9.5", + "@bruits/satteri-linux-x64-musl": "0.9.5", + "@bruits/satteri-wasm32-wasi": "0.9.5", + "@bruits/satteri-win32-arm64-msvc": "0.9.5", + "@bruits/satteri-win32-x64-msvc": "0.9.5" + } + }, + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.3.tgz", + "integrity": "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==", + "optional": true, + "dependencies": { + "@img/colour": "^1.1.0", + "detect-libc": "^2.1.2", + "semver": "^7.8.5" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.35.3", + "@img/sharp-darwin-x64": "0.35.3", + "@img/sharp-freebsd-wasm32": "0.35.3", + "@img/sharp-libvips-darwin-arm64": "1.3.2", + "@img/sharp-libvips-darwin-x64": "1.3.2", + "@img/sharp-libvips-linux-arm": "1.3.2", + "@img/sharp-libvips-linux-arm64": "1.3.2", + "@img/sharp-libvips-linux-ppc64": "1.3.2", + "@img/sharp-libvips-linux-riscv64": "1.3.2", + "@img/sharp-libvips-linux-s390x": "1.3.2", + "@img/sharp-libvips-linux-x64": "1.3.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.2", + "@img/sharp-libvips-linuxmusl-x64": "1.3.2", + "@img/sharp-linux-arm": "0.35.3", + "@img/sharp-linux-arm64": "0.35.3", + "@img/sharp-linux-ppc64": "0.35.3", + "@img/sharp-linux-riscv64": "0.35.3", + "@img/sharp-linux-s390x": "0.35.3", + "@img/sharp-linux-x64": "0.35.3", + "@img/sharp-linuxmusl-arm64": "0.35.3", + "@img/sharp-linuxmusl-x64": "0.35.3", + "@img/sharp-webcontainers-wasm32": "0.35.3", + "@img/sharp-win32-arm64": "0.35.3", + "@img/sharp-win32-ia32": "0.35.3", + "@img/sharp-win32-x64": "0.35.3" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/shiki": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.3.1.tgz", + "integrity": "sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw==", + "dependencies": { + "@shikijs/core": "4.3.1", + "@shikijs/engine-javascript": "4.3.1", + "@shikijs/engine-oniguruma": "4.3.1", + "@shikijs/langs": "4.3.1", + "@shikijs/themes": "4.3.1", + "@shikijs/types": "4.3.1", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/sitemap": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-9.0.1.tgz", + "integrity": "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==", + "dependencies": { + "@types/node": "^24.9.2", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.4.1" + }, + "bin": { + "sitemap": "dist/esm/cli.js" + }, + "engines": { + "node": ">=20.19.5", + "npm": ">=10.8.2" + } + }, + "node_modules/smol-toml": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.1.tgz", + "integrity": "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.2.tgz", + "integrity": "sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==", + "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.5.0" + }, + "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.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + }, + "node_modules/tinyclip": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.15.tgz", + "integrity": "sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==", + "engines": { + "node": "^16.14.0 || >= 17.3.0" + } + }, + "node_modules/tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "optional": true + }, + "node_modules/typesafe-path": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/typesafe-path/-/typesafe-path-0.2.2.tgz", + "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-auto-import-cache": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.6.tgz", + "integrity": "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==", + "dev": true, + "dependencies": { + "semver": "^7.3.8" + } + }, + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==" + }, + "node_modules/ultrahtml": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.7.0.tgz", + "integrity": "sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==" + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "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.4", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz", + "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "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.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "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-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "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.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/unstorage/node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/unstorage/node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "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.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "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.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.5.tgz", + "integrity": "sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.17", + "rolldown": "~1.1.5", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "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.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/volar-service-css": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.71.tgz", + "integrity": "sha512-wRRFt9BpjMKCazcgOh67MSjUjiWUCAh99DyYSDIOTuxaRjEtDC7PpB0k1Y1wbJIW/pVtMUSVbpPo3UGSm0Byxw==", + "dev": true, + "dependencies": { + "vscode-css-languageservice": "^6.3.0", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-emmet": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.71.tgz", + "integrity": "sha512-zqjzt6bN95e3CUstBm0PBFAJnrfz0ZAARka87fart46/gNCLLuP3Vujy8V/J8HEziTFLnfkgIASLFYPUhonJcA==", + "dev": true, + "dependencies": { + "@emmetio/css-parser": "^0.4.1", + "@emmetio/html-matcher": "^1.3.0", + "@vscode/emmet-helper": "^2.9.3", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-html": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.71.tgz", + "integrity": "sha512-e8tHPhgQ7ooLfudAEIku+kgd9pWkq3SSz8RbnQDI1+Eb8wbenkLGHqoirLqz5ORLV6wIMr2Iv08RWBG5eOcgpw==", + "dev": true, + "dependencies": { + "vscode-html-languageservice": "^5.3.0", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-prettier": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.71.tgz", + "integrity": "sha512-Rz7JVH3qD108UCdmIEiZvOBNljMt2nLFdbN8AXcDfn7xD9F5I2aCIsDVqBbXw21PsnxG0b7MfwtNF+zPS/NKUg==", + "dev": true, + "dependencies": { + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0", + "prettier": "^2.2 || ^3.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + }, + "prettier": { + "optional": true + } + } + }, + "node_modules/volar-service-typescript": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.71.tgz", + "integrity": "sha512-yTtM/BVT6hoyEYnDtaCyAtNhdNeS/mhTTABlBOdw3NNiRBUin3IznFJpgfjer4c6RYopiPjjQjc9VFhxVl1mLw==", + "dev": true, + "dependencies": { + "path-browserify": "^1.0.1", + "semver": "^7.6.2", + "typescript-auto-import-cache": "^0.3.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-nls": "^5.2.0", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-typescript-twoslash-queries": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.71.tgz", + "integrity": "sha512-9K2k72s4n7rV9s4bX0MyjbX9iBribvKZbBJKuEmTCZfeWJXs6Yh7bGpY4eoc7UufAjvpheBqwyZCOIPBvxCv0A==", + "dev": true, + "dependencies": { + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-yaml": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-yaml/-/volar-service-yaml-0.0.71.tgz", + "integrity": "sha512-qYGWGuVpUTnZGu5P/CR4KLK4aIR8RrcVnmfZ2eRcj9q/I8VZCoC5yy9FtEvfNvnDp4MU17yhdJcvpQPIqhJS2Q==", + "dev": true, + "dependencies": { + "vscode-uri": "^3.0.8", + "yaml-language-server": "~1.23.0" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/vscode-css-languageservice": { + "version": "6.3.10", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.10.tgz", + "integrity": "sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA==", + "dev": true, + "dependencies": { + "@vscode/l10n": "^0.0.18", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "3.17.5", + "vscode-uri": "^3.1.0" + } + }, + "node_modules/vscode-css-languageservice/node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "dev": true + }, + "node_modules/vscode-html-languageservice": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.6.2.tgz", + "integrity": "sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg==", + "dev": true, + "dependencies": { + "@vscode/l10n": "^0.0.18", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "^3.17.5", + "vscode-uri": "^3.1.0" + } + }, + "node_modules/vscode-json-languageservice": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.8.tgz", + "integrity": "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.2" + }, + "engines": { + "npm": ">=7.0.0" + } + }, + "node_modules/vscode-jsonrpc": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.1.tgz", + "integrity": "sha512-rfuA6T75H6m5EkbhtEPzre9pT0HPcDI2MMy4+nPFIBks5J8JBAUHD4tRYSgaBOijIEC7SRkC1kKyXTLqbmh9jw==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "dev": true, + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.18.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.18.2.tgz", + "integrity": "sha512-XRyDbT0Pp3sSNti3JmxVEUMySWCSi1hhM+/KUlCy1hV1zmrqpM1OwO12EAki8blhmLuIMpaJrYbo0OzGVfK2Qg==", + "dev": true, + "dependencies": { + "vscode-jsonrpc": "9.0.1", + "vscode-languageserver-types": "3.18.0" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "dev": true + }, + "node_modules/vscode-languageserver-types": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.18.0.tgz", + "integrity": "sha512-8TsGPNMIMiiBdkORgRSvLjuiEIiAFtO+KssmYWxQ+uSVvlf7RjK8YKCOjPzZ+YA04jXEV7+7LvkSmHkhpNS99g==", + "dev": true + }, + "node_modules/vscode-languageserver/node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver/node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "dev": true, + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver/node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "dev": true + }, + "node_modules/vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", + "dev": true + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "devOptional": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yaml-language-server": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/yaml-language-server/-/yaml-language-server-1.23.0.tgz", + "integrity": "sha512-3qVyCOexLCWw06PQa5kRPwvMWMZ/eZeCRWUvgD6a0OkqL/4iCnxy2WumbWifa937Uo5xhyWJ0uxlU39ljhNh7A==", + "dev": true, + "dependencies": { + "@vscode/l10n": "^0.0.18", + "ajv": "^8.17.1", + "ajv-draft-04": "^1.0.0", + "ajv-i18n": "^4.2.0", + "prettier": "^3.8.1", + "request-light": "^0.5.7", + "vscode-json-languageservice": "4.1.8", + "vscode-languageserver": "^9.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.16.0", + "vscode-uri": "^3.0.2", + "yaml": "2.8.3" + }, + "bin": { + "yaml-language-server": "bin/yaml-language-server" + } + }, + "node_modules/yaml-language-server/node_modules/request-light": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz", + "integrity": "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==", + "dev": true + }, + "node_modules/yaml-language-server/node_modules/yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..767c119 --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "llm-atlas", + "version": "0.1.0", + "private": true, + "type": "module", + "description": "从语言模型基础到 Kimi K3 的中文技术脉络与可视化课程", + "scripts": { + "dev": "astro dev --host 0.0.0.0", + "build": "astro build", + "preview": "astro preview --host 0.0.0.0", + "check": "astro check" + }, + "dependencies": { + "@astrojs/sitemap": "3.7.3", + "astro": "7.1.4" + }, + "devDependencies": { + "@astrojs/check": "0.9.6", + "typescript": "5.9.3" + } +} diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..3898517 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..5b64b26 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://llm-atlas.k1412.top/sitemap-index.xml diff --git a/research/GROK_RESEARCH_ROADMAP.md b/research/GROK_RESEARCH_ROADMAP.md new file mode 100644 index 0000000..be39dde --- /dev/null +++ b/research/GROK_RESEARCH_ROADMAP.md @@ -0,0 +1,535 @@ +# LLM Atlas — Grok 辅助检索路线(K3-Anchored) + +> 生成来源:本机 Grok CLI Headless 模式,2026-07-28。 +> 用途:扩展论文线索与检查遗漏,不直接作为正文证据。主代理需回到每篇一手来源核验后,才能把结论写入网站。 + +**Site:** Chinese educational site *LLM Atlas* +**Anchor primary source:** Kimi Team, *Kimi K3: Open Frontier Intelligence*, arXiv:[2607.24653](https://arxiv.org/abs/2607.24653) (2026-07) · DOI:[10.48550/arXiv.2607.24653](https://doi.org/10.48550/arXiv.2607.24653) +**Companion official sources:** [Kimi Linear](https://arxiv.org/abs/2510.26692) · [Attention Residuals](https://arxiv.org/abs/2603.15031) · [Kimi K2](https://arxiv.org/abs/2507.20534) · [Kimi K2.5](https://arxiv.org/abs/2602.02276) · [Kimi-VL / MoonViT](https://arxiv.org/abs/2504.07491) · [Muon is Scalable](https://arxiv.org/abs/2502.16982) + +**Scope rules** +- Landmark *primary* papers only; year | title | canonical arXiv/DOI | problem solved | bridge to next idea. +- ≥80 papers; DeepSeek lineage given dense coverage; post-V3.2 only if **official** DeepSeek release. +- Uncertain / underspecified claims marked **`[UNCERTAIN]`**. +- No chapter prose — notes + tables only. + +**Paper count (this doc):** ~95 listed entries (some multi-cited across modules). + +--- + +## 0. K3 Spec Snapshot (from official report) + +| Spec | Value (official abstract / Table 1) | +|---|---| +| Total / activated params | 2.8T MoE / **104B** activated | +| Context | **1M** tokens | +| Attention pattern | Hybrid **3 KDA : 1 Gated MLA** per block; final layer Gated MLA; **69 KDA + 24 MLA** | +| Depth connectivity | **Block Attention Residuals** (blocks of 12 layers) | +| FFN | **Stable LatentMoE**: **16 of 896** routed experts (+ shared experts) | +| Vision | **MoonViT-V2** (~401M), trained **from scratch** with NTP | +| Optimizer | **Per-Head Muon** (+ weight clipping) | +| Positional | **NoPE** on MLA; position via KDA decay/gating | +| Deploy quant (post-train QAT) | MoE expert weights **MXFP4**, activations **MXFP8** | +| Scaling claim | ~**2.5×** overall scaling efficiency vs Kimi K2 **`[claim from authors]`** | +| Post-train pillars | Multi-effort RL · Multi-Teacher On-Policy Distillation (MOPD) · agent environments · 1M agentic RL | + +--- + +## 1. K3 Ingredient → Research Ancestry Map + +| K3 ingredient | Direct primary | Immediate ancestry | Module | +|---|---|---|---| +| **KDA / Kimi Linear** | [2510.26692](https://arxiv.org/abs/2510.26692) | Gated DeltaNet → DeltaNet → GLA → Linear Transformer | M04–M05 | +| **Gated MLA** | K3 §2.1.2 + DeepSeek-V2 MLA [2405.04434](https://arxiv.org/abs/2405.04434) | MQA/GQA → KV compression → latent KV | M03, M05 | +| **Attention Residuals** | [2603.15031](https://arxiv.org/abs/2603.15031) | ResNet residuals → PreNorm dilution problem | M02, M06 | +| **Stable LatentMoE** | K3 §2.3 + LatentMoE [2601.18089](https://arxiv.org/abs/2601.18089) | Switch/GShard → DeepSeekMoE → aux-loss-free routing → QB | M07, M09 | +| **MoonViT-V2** | K3 §2.4; prior MoonViT in Kimi-VL [2504.07491](https://arxiv.org/abs/2504.07491) | ViT → native-res VL encoders; K3 drops SigLIP init | M14 | +| **Per-head Muon** | K3 §2.5; Muon scale-up [2502.16982](https://arxiv.org/abs/2502.16982); MuonClip in K2 [2507.20534](https://arxiv.org/abs/2507.20534) | AdamW → matrix orthogonalization optimizers | M08 | +| **Scaling / data** | K3 §3; Kaplan/Hoffmann; K2 data rephrase | Scaling laws + domain mix + rephrase | M08 | +| **Long context (1M)** | K3 §3 progressive extension + KDA CP | RoPE/YaRN → Ring/Ulysses → NoPE+KDA | M11 | +| **Multi-effort RL** | K3 §4 effort ∈ {low, high, max} | o1-style test-time compute; k1.5 | M13 | +| **Multi-teacher on-policy distillation (MOPD)** | K3 §4.1.3; Thinking Machines on-policy distill | R1 distillation; on-policy KD | M13 | +| **Agent environments** | K3 §4.2 (pluggable harness, AET, knowledge graph) | Tool-use / SWE / OSWorld lineage | M14 | +| **KDA systems** | K3 §5.1 FlashKDA, KDA Context Parallelism | FLA / DeltaNet CP | M11, M15 | +| **MoonEP** | K3 §5 (perfect balance EP; vs DeepEP) | DeepEP / expert parallel | M11, M15 | +| **1M agentic RL** | K3 §5 partial rollouts, external KV, resumable sandboxes | Long-horizon RL infra | M14–M15 | +| **MXFP4** | K3 QAT §4.1.4; OCP MX [2310.10537](https://arxiv.org/abs/2310.10537) | FP8 training → microscaling | M10 | + +--- + +## 2. Module Graph & Prerequisites + +``` +M01 Foundations ──► M02 Residual/Norm/Pos + │ │ + ▼ ▼ +M03 Softmax KV path M04 Linear/Delta/SSM path + │ │ + └────────┬───────────┘ + ▼ + M05 Hybrid Attention (KDA+Gated MLA, NoPE) + │ + ▼ + M06 Depth Connectivity (AttnRes) + │ + M07 Sparse MoE width (Stable LatentMoE) + │ + M08 Scale / Data / Muon + │ + M09 DeepSeek full stack (MLA→V3→R1→V3.2→V4) + │ + ┌───────────┼───────────┐ + ▼ ▼ ▼ + M10 Quant M11 Long-ctx M12 Alignment (PPO/DPO) + │ systems │ + └───────────┬───────────┘ + ▼ + M13 Reasoning RL + MOPD + multi-effort + │ + ▼ + M14 Agents + Vision (MoonViT-V2) + │ + ▼ + M15 K3 Capstone Systems (MoonEP, 1M RL, MXFP4 serve) +``` + +**Suggested learning order:** M01→M02→(M03∥M04)→M05→M06→M07→M08→M09→(M10∥M11∥M12)→M13→M14→M15. + +--- + +## M01 — Foundations: Sequence Models & Softmax Attention + +**Prerequisites:** undergrad ML, basic seq modeling +**Why for K3:** defines the quadratic attention baseline that KDA/MLA hybridize. + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2014 | Sequence to Sequence Learning with Neural Networks | https://arxiv.org/abs/1409.3215 | End-to-end neural transduction without alignments | Need better alignment / attention | +| 2015 | Neural Machine Translation by Jointly Learning to Align and Translate | https://arxiv.org/abs/1409.0473 | Soft attention over encoder states | Attention as differentiable lookup | +| 2017 | Attention Is All You Need | https://arxiv.org/abs/1706.03762 | Drop recurrence; multi-head self-attention + PE | Canonical Transformer stack | +| 2018 | BERT: Pre-training of Deep Bidirectional Transformers | https://arxiv.org/abs/1810.04805 | Bidirectional pretrain for understanding | Pretrain–finetune paradigm | +| 2018 | Improving Language Understanding by Generative Pre-Training (GPT) | https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf | Decoder-only LM pretrain | GPT lineage | +| 2019 | Language Models are Unsupervised Multitask Learners (GPT-2) | https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf | Zero-shot transfer via scale | Scaling narrative | +| 2020 | Language Models are Few-Shot Learners (GPT-3) | https://arxiv.org/abs/2005.14165 | In-context learning at 175B | ICL as emergent interface | + +--- + +## M02 — Residual Stacks, Normalization, Position + +**Prerequisites:** M01 +**Why for K3:** PreNorm residual dilution motivates **AttnRes**; NoPE choice; RMSNorm in MoonViT-V2. + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2015 | Deep Residual Learning for Image Recognition | https://arxiv.org/abs/1512.03385 | Train very deep nets via identity skip | Residual highway becomes default | +| 2016 | Layer Normalization | https://arxiv.org/abs/1607.06450 | Stabilize RNN/Transformer activations | LN → PreNorm stacks | +| 2019 | Root Mean Square Layer Normalization | https://arxiv.org/abs/1910.07467 | Cheaper, stable norm without mean centering | Modern LLM default (incl. MoonViT-V2) | +| 2021 | RoFormer: Enhanced Transformer with Rotary Position Embedding | https://arxiv.org/abs/2104.09864 | Relative PE via rotations | Dominant PE until long-ctx hacks | +| 2023 | YaRN: Efficient Context Window Extension of LLMs | https://arxiv.org/abs/2309.00071 | Extend RoPE LMs beyond train length | Positional interpolation family | +| 2024 | The NoPE Hypothesis (and related NoPE studies) **`[select primary carefully; see also K3 NoPE practice]`** | https://arxiv.org/abs/2404.12224 | When explicit PE is unnecessary | K3: NoPE on MLA; position via KDA | + +**K3 note:** MLA layers use **NoPE**; positional signal comes from KDA’s channel-wise decay/gating (K3 §2.1, §3). + +--- + +## M03 — Softmax Attention Efficiency & KV Compression → MLA + +**Prerequisites:** M01–M02 +**Why for K3:** **Gated MLA** is the global-attention “anchor” layer in the 3:1 hybrid. + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2019 | Fast Transformer Decoding: One Write-Head is All You Need (MQA) | https://arxiv.org/abs/1911.02150 | Share KV across heads → smaller cache | Multi-query attention | +| 2023 | GQA: Training Generalized Multi-Query Transformer Models | https://arxiv.org/abs/2305.13245 | Interpolate MHA↔MQA | Production GQA default | +| 2022 | FlashAttention: Fast and Memory-Efficient Exact Attention | https://arxiv.org/abs/2205.14135 | IO-aware exact attention | Hardware-aware attention kernels | +| 2023 | FlashAttention-2 | https://arxiv.org/abs/2307.08691 | Higher occupancy / better parallelism | Training/prefill baseline | +| 2023 | LongNet: Scaling Transformers to 1B Tokens (dilated attn) | https://arxiv.org/abs/2307.02486 | Sparse patterns for extreme length | Sparse attention design space | +| 2024 | DeepSeek-V2: Strong Economical Efficient MoE LM (**MLA**) | https://arxiv.org/abs/2405.04434 | Compress KV into latent vector (MLA) | Latent cache for huge MoEs | +| 2024 | DeepSeek-V3 Technical Report (MLA at 671B) | https://arxiv.org/abs/2412.19437 | Scale MLA + DeepSeekMoE production-grade | Gated MLA inherits MLA | +| 2025 | DeepSeek-V3.2 (**DSA** on MLA) | https://arxiv.org/abs/2512.02556 | Fine-grained sparse attention + lightning indexer | Sparse selection over latent KV | + +**K3 Gated MLA (official):** ungated MLA output gated by full-rank \(W_g\); gate matches full-rank KDA output gate (K3 §2.1.2). + +--- + +## M04 — Linear Attention, Delta Rule, SSMs → KDA Ancestry + +**Prerequisites:** M01 +**Why for K3:** **KDA** = gated delta-rule recurrence with finer channel-wise forget + full-rank output gate. + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2020 | Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention | https://arxiv.org/abs/2006.16236 | Kernelize attention → linear time / RNN form | Linear Transformer baseline | +| 2021 | Linear Transformers Are Secretly Fast Weight Programmers | https://arxiv.org/abs/2102.11174 | Delta-rule / fast weights view of linear attn | **Delta rule** update idea | +| 2023 | Mamba: Linear-Time Sequence Modeling with Selective SSMs | https://arxiv.org/abs/2312.00752 | Input-dependent SSM selection | Modern linear-time competitor | +| 2024 | Gated Linear Attention Transformers (GLA) | https://arxiv.org/abs/2312.06635 | Data-dependent gates + FlashLinearAttention | Hardware-efficient gated linear attn | +| 2024 | Parallelizing Linear Transformers with the Delta Rule (DeltaNet) | https://arxiv.org/abs/2406.06484 | Parallel train delta-rule linear transformers | Chunkwise delta training | +| 2024 | Transformers are SSMs / Mamba-2 (SSD) | https://arxiv.org/abs/2405.21060 | Unify Transformer & SSM via structured duality | State-space dual algorithms | +| 2025 | Gated Delta Networks: Improving Mamba2 with Delta Rule | https://arxiv.org/abs/2412.06464 | Combine **gating + delta rule** | Direct parent of **KDA** | +| 2025 | Kimi Linear: Expressive Efficient Attention (**KDA**) | https://arxiv.org/abs/2510.26692 | Channel-wise fine-grained KDA + hybrid with MLA | Productionized in K3 (with K3-specific gates) | + +**K3 KDA deltas vs Kimi Linear (official §2.1.1):** lower-bounded log-decay (tile-stable chunkwise form); **full-rank** output gate (vs low-rank in Linear). + +--- + +## M05 — Hybrid Attention Architectures (KDA + Gated MLA + NoPE) + +**Prerequisites:** M03, M04 +**Why for K3:** core sequence mixer: **3×KDA + 1×Gated MLA**, final Gated MLA. + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2023 | Retentive Network (RetNet) | https://arxiv.org/abs/2307.08621 | Multi-scale retention recurrence | Hybrid linear/global motivation | +| 2024 | Griffin: Mixing Gated Linear Recurrences with Local Attention | https://arxiv.org/abs/2402.19427 | Mix local attention + linear recurrence | Hybrid design pattern | +| 2024 | Jamba: Hybrid Transformer-Mamba | https://arxiv.org/abs/2403.19887 | Production hybrid MoE | Hybrid at scale | +| 2024 | DeltaNet hybrids (sliding / global layers) *in* DeltaNet paper | https://arxiv.org/abs/2406.06484 | Sparse global layers restore quality | 3:1-style interleaving idea | +| 2025 | Kimi Linear (3:1 KDA:MLA hybrid) | https://arxiv.org/abs/2510.26692 | Match/beat full MLA quality at lower KV | Direct K3 attention recipe | +| 2026 | Kimi K3 (Gated MLA + refined KDA) | https://arxiv.org/abs/2607.24653 | Scale hybrid to 2.8T / 1M ctx | Capstone hybrid | + +**Reading target:** derive why periodic full latent attention repairs linear-state information bottlenecks. + +--- + +## M06 — Depth-wise Connectivity: PreNorm Dilution → Attention Residuals + +**Prerequisites:** M02, M05 +**Why for K3:** **Block AttnRes** is the depth information-flow upgrade. + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2015 | Deep Residual Learning (again as residual baseline) | https://arxiv.org/abs/1512.03385 | Identity mapping depth | Fixed unit residual weights | +| 2016 | Highway Networks | https://arxiv.org/abs/1505.00387 | Learned gates on residual paths | Content-dependent depth flow | +| 2017 | DenseNet | https://arxiv.org/abs/1608.06993 | Concatenate all prior feature maps | Dense cross-layer reuse | +| 2021 | DeepNet: Stabilizing Extremely Deep Transformers | https://arxiv.org/abs/2203.00555 | Scale residuals for 1000-layer Transformers | Deep PreNorm issues | +| 2026 | Attention Residuals (AttnRes / Block AttnRes) | https://arxiv.org/abs/2603.15031 | Softmax over prior layer outputs; block variant for memory | **K3 uses Block AttnRes** (S≈12) | +| 2026 | DeepSeek-V4 mHC (manifold-constrained hyper-connections) *official later residual variant* | https://arxiv.org/abs/2606.19348 | Alternative residual upgrade at 1M-ctx MoE | Parallel residual research thread | + +**K3 detail:** pseudo-query \(q_l=w_l\); Block AttnRes reduces overhead \(O(Ld)\to O(Nd)\). + +--- + +## M07 — Sparse Width: MoE → DeepSeekMoE → LatentMoE → Stable LatentMoE + +**Prerequisites:** M01, M08 (scaling intuition helps) +**Why for K3:** **Stable LatentMoE** width path (16/896 + Quantile Balancing). + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2017 | Outrageously Large Neural Networks (Sparsely-Gated MoE) | https://arxiv.org/abs/1701.06538 | Conditional computation at scale | MoE modern start | +| 2020 | GShard: Scaling Giant Models with Conditional Computation | https://arxiv.org/abs/2006.16668 | Automatic sharding + MoE at TPU scale | Systems MoE | +| 2021 | Switch Transformers | https://arxiv.org/abs/2101.03961 | Simplify to top-1 routing; trillion-param | Load-balance auxiliaries | +| 2022 | ST-MoE | https://arxiv.org/abs/2202.08906 | Stable training recipes for sparse models | Stability folklore | +| 2024 | DeepSeekMoE: Towards Ultimate Expert Specialization | https://arxiv.org/abs/2401.06066 | Fine-grained experts + shared experts | DeepSeek MoE DNA | +| 2024 | Mixtral of Experts | https://arxiv.org/abs/2401.04088 | Strong open sparse LM | Sparse quality reference | +| 2024 | DeepSeek-V2 (DeepSeekMoE @ production) | https://arxiv.org/abs/2405.04434 | Economical training with sparse FFN | MLA+MoE combo | +| 2024 | DeepSeek-V3 (aux-loss-free routing) | https://arxiv.org/abs/2412.19437 | Bias-based load balance without aux loss | Aux-loss-free lineage | +| 2026 | LatentMoE: Optimal Accuracy per FLOP/Parameter | https://arxiv.org/abs/2601.18089 | Route in latent cheaper expert path | Namesake of **LatentMoE** | +| 2026 | Kimi K3 Stable LatentMoE + **Quantile Balancing** | https://arxiv.org/abs/2607.24653 | Stabilize extreme sparsity (896 experts, k=16) | Production K3 FFN | + +**K3 QB (official):** expert bias from margin quantiles via global histogram all-reduce (not token-side exact quantiles). +**Also cite:** Jianlin Su blog *Travels in MoE* (load balance via optimal assignment) — referenced by K3 as [111] (Chinese primary blog, not arXiv). + +--- + +## M08 — Scaling Laws, Data Recipes, Optimizers (→ Per-Head Muon) + +**Prerequisites:** M01 +**Why for K3:** 2.5× scaling-efficiency claim; Per-Head Muon; cosine > WSD in their search. + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2020 | Scaling Laws for Neural Language Models (Kaplan et al.) | https://arxiv.org/abs/2001.08361 | Power-law loss vs N, D, C | Classical scaling | +| 2022 | Training Compute-Optimal LLMs (Chinchilla / Hoffmann) | https://arxiv.org/abs/2203.15556 | Tokens–params balance | TPP retuning practice | +| 2014 | Adam: A Method for Stochastic Optimization | https://arxiv.org/abs/1412.6980 | Adaptive moments | Default baseline | +| 2017 | Decoupled Weight Decay Regularization (AdamW) | https://arxiv.org/abs/1711.05101 | Correct weight decay | Pre-Muon default | +| 2024 | Muon: An Optimizer for Hidden Layers (Keller Jordan et al.) | https://kellerjordan.github.io/posts/muon/ | Newton–Schulz orthogonalized momentum | Matrix-wise updates | +| 2025 | Muon is Scalable for LLM Training (Moonshot / Moonlight) | https://arxiv.org/abs/2502.16982 | Weight decay + update scale → Muon at LLM scale | Moonshot optimizer stack | +| 2025 | Kimi K2 (MuonClip / QK-Clip) | https://arxiv.org/abs/2507.20534 | Stabilize attention logits under Muon | Pretrain 15.5T zero spike claim | +| 2026 | Kimi K3 Per-Head Muon | https://arxiv.org/abs/2607.24653 | Orthogonalize QKV **per head** for balanced head scales | K3 default optimizer | + +**Data / schedule landmarks** + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2020 | Exploring the Limits of Transfer Learning (T5) | https://arxiv.org/abs/1910.10683 | Unified text-to-text + C4 data | Data quality culture | +| 2022 | Training Compute-Optimal… (data side of Chinchilla) | https://arxiv.org/abs/2203.15556 | More tokens for given compute | Overtrain regimes | +| 2024 | DeepSeek LLM: Scaling Open-Source LMs with Longtermism | https://arxiv.org/abs/2401.02954 | Open scaling-law study + 67B | DeepSeek program start | +| 2025 | MiniCPM / WSD schedule discussion | https://arxiv.org/abs/2404.06395 | Warmup–Stable–Decay alternative | K3 finds **cosine better** after independent HPO | +| 2025 | Kimi K2 data rephrasing recipe | https://arxiv.org/abs/2507.20534 | Knowledge/math rephrase + fidelity checks | Inherited by K3 §3.1 | + +--- + +## M09 — DeepSeek Lineage (Dense → MoE → MLA → V3 → R1 → V3.2 → V4) + +**Prerequisites:** M03, M07, M08, M12–M13 for post-train pieces +**Policy:** include only **official** DeepSeek papers/reports. + +### 9.1 Pretrain architecture stack + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2024 | DeepSeek LLM: Scaling Open-Source Language Models with Longtermism | https://arxiv.org/abs/2401.02954 | Open dense 7B/67B + scaling study | Foundation | +| 2024 | DeepSeekMoE: Ultimate Expert Specialization | https://arxiv.org/abs/2401.06066 | Fine-grained + shared experts | Sparse specialization | +| 2024 | DeepSeek-V2: MLA + DeepSeekMoE | https://arxiv.org/abs/2405.04434 | KV latent compression + economical MoE | **MLA birth** | +| 2024 | DeepSeek-V3 Technical Report | https://arxiv.org/abs/2412.19437 | 671B/37B act; **FP8**; **MTP**; **aux-loss-free routing**; **DualPipe** | Flagship pretrain stack | +| 2025 | DeepSeek-V3.2: DSA + scalable RL + agentic synthesis | https://arxiv.org/abs/2512.02556 | **DeepSeek Sparse Attention**; agent post-train scale | Long-ctx efficiency | +| 2026 | DeepSeek-V4: Million-Token Context Intelligence | https://arxiv.org/abs/2606.19348 | CSA+HCA hybrid attn; **mHC**; Muon; 1M ctx Pro/Flash | Official later 1M-ctx peer to K3 | + +### 9.2 Math, RL, reasoning distillation + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2024 | DeepSeekMath (+ **GRPO**) | https://arxiv.org/abs/2402.03300 | Math continual pretrain + critic-free group RL | **GRPO** algorithm | +| 2025 | DeepSeek-R1: Incentivizing Reasoning via RL | https://arxiv.org/abs/2501.12948 | **R1-Zero** pure RL; **R1** multi-stage; **distillation** to dense 1.5B–70B | Reasoning RL template | +| 2025 | DeepSeek-R1 Nature version (same line) | https://doi.org/10.1038/s41586-025-09422-z | Peer-reviewed presentation of R1 | Archival citation | + +### 9.3 V3 systems keywords → primary sections + +| Keyword | Where (primary) | Problem solved | Bridge | +|---|---|---|---| +| **FP8 mixed precision** | V3 report §3.3 | Low-precision train at 671B | → MX / QAT serving | +| **MTP** (multi-token prediction) | V3 report | Stronger pretrain objective / draft head | Speculative / denser signal | +| **Aux-loss-free routing** | V3 report | Balance without aux loss interference | → K3 QB different mechanism | +| **DualPipe** | V3 report §3.2.1 | Overlap PP bubbles + MoE dispatch/combine | → MoonEP alternative EP design | +| **DSA** | V3.2 report | Sparse token selection under MLA | Contrast with KDA hybrid | +| **DeepEP** | https://github.com/deepseek-ai/DeepEP | Expert-parallel comm library | K3 MoonEP builds on / contrasts | + +**Atlas teaching note:** treat DeepSeek as the *dense reference stack* for MLA/MoE/FP8/RL; treat K3 as the *hybrid linear + AttnRes + Stable LatentMoE* fork at larger sparsity and 1M agentic RL. + +--- + +## M10 — Low-Precision Training & Deployment (FP8 → MXFP4) + +**Prerequisites:** M08–M09 +**Why for K3:** post-train **QAT** with **MXFP4 weights / MXFP8 activations** on MoE experts. + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2018 | Quantization and Training of Neural Networks for Integer-Arithmetic-Only Inference | https://arxiv.org/abs/1712.05877 | QAT for int inference | QAT paradigm | +| 2020 | Training with Quantization Noise | https://arxiv.org/abs/2004.07320 | Noise injection for robust quant | QAT variants | +| 2022 | FP8 Formats for Deep Learning (Micikevicius et al.) | https://arxiv.org/abs/2209.05433 | FP8 train/infer formats | Hardware FP8 | +| 2023 | Microscaling Data Formats for Deep Learning (**MX / MXFP4**) | https://arxiv.org/abs/2310.10537 | Block scales + narrow element types | **OCP MX** family | +| 2024 | DeepSeek-V3 FP8 training framework | https://arxiv.org/abs/2412.19437 | Validate FP8 at extreme MoE scale | Pretrain low-prec | +| 2026 | Kimi K3 MXFP4 QAT from SFT onward | https://arxiv.org/abs/2607.24653 | Deploy-time memory for 2.8T experts | Serving recipe | + +**OCP primary (non-arXiv):** OCP Microscaling Formats (MX) Specification v1.0 — https://www.opencompute.org/documents/ocp-microscaling-formats-mx-v1-0-spec-final-pdf + +--- + +## M11 — Long Context: Algorithms & Parallelism (→ KDA CP, 1M) + +**Prerequisites:** M03–M05 +**Why for K3:** progressive 8K→64K→256K→**1M**; **KDA Context Parallelism**; state-aware prefix cache. + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2023 | ALiBi | https://arxiv.org/abs/2108.12409 | Length extrapolation via linear biases | PE-free-ish long ctx | +| 2023 | RoPE / YaRN (see M02) | https://arxiv.org/abs/2309.00071 | Extend rotary models | Common production path | +| 2023 | Ring Attention with Blockwise Transformers | https://arxiv.org/abs/2310.01889 | Sequence parallel for near-infinite context | Distributed long attn | +| 2023 | DeepSpeed Ulysses | https://arxiv.org/abs/2309.14509 | Sequence parallelism system opts | Cluster long-ctx train | +| 2024 | Linear Attention Sequence Parallelism (LASP) | https://arxiv.org/abs/2404.02882 | SP specialized for linear attn | Linear-SP ancestors | +| 2025 | LASP-2 / hybrid linear SP | https://arxiv.org/abs/2502.07864 **`[verify id if citing; K3 cites related]`** | Hybrid linear+softmax SP | Closer to KDA hybrids | +| 2025 | Context Parallelism for DeltaNet (Wang) | https://yywangcs.notion.site/DeltaNet-2a9fc9f5d8058013a498f34e0b25bd52 | CP for delta recurrence | Direct ancestor of **KCP** | +| 2026 | Kimi K3 KDA Context Parallelism + FlashKDA | https://arxiv.org/abs/2607.24653 · FlashKDA https://github.com/MoonshotAI/FlashKDA | Correct state transport under delta update \(M_t S_{t-1}\) | 1M train/prefill | + +**K3 progressive extension (official):** pretrain grows 8K→64K; cooldown 256K→1M; needle/synthetic scatter tasks force full-window use. + +--- + +## M12 — Alignment Foundations (RLHF / PPO / DPO) + +**Prerequisites:** M01 +**Why for K3:** base of modern post-train before GRPO / multi-effort / MOPD. + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2017 | Proximal Policy Optimization Algorithms | https://arxiv.org/abs/1707.06347 | Stable policy gradient updates | RL workhorse | +| 2022 | Training Language Models to Follow Instructions with Human Feedback (InstructGPT) | https://arxiv.org/abs/2203.02155 | RLHF pipeline for LLMs | Industry alignment template | +| 2022 | Constitutional AI | https://arxiv.org/abs/2212.08073 | Principle-based AI feedback | RLAIF direction | +| 2023 | Direct Preference Optimization (DPO) | https://arxiv.org/abs/2305.18290 | Preference learning without RL loop | Offline preference | +| 2023 | Llama 2: Open Foundation and Fine-Tuned Chat Models | https://arxiv.org/abs/2307.09288 | Open RLHF stack details | Open alignment recipes | +| 2024 | SimPO / ORPO family (optional shortlist) | https://arxiv.org/abs/2405.14734 | Simpler preference objectives | Alt to DPO | + +--- + +## M13 — Reasoning RL, Multi-Effort, On-Policy Distillation + +**Prerequisites:** M12, M09 +**Why for K3:** multi-domain RL × effort levels; **MOPD** consolidation. + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2022 | Chain-of-Thought Prompting | https://arxiv.org/abs/2201.11903 | Elicit intermediate reasoning | Test-time reasoning culture | +| 2023 | Let’s Verify Step by Step (process reward) | https://arxiv.org/abs/2305.20050 | Process vs outcome supervision | PRM path | +| 2024 | DeepSeekMath / **GRPO** | https://arxiv.org/abs/2402.03300 | Group-relative baseline, no critic | Memory-efficient RL | +| 2024 | OpenAI o1 announcement / “Learning to Reason with LLMs” | https://openai.com/index/learning-to-reason-with-llms/ | Scale RL + test-time compute | Multi-effort ancestor **`[blog primary; not full paper]`** | +| 2025 | Kimi k1.5: Scaling RL with LLMs | https://arxiv.org/abs/2501.12599 | Long-CoT RL scaling (Moonshot) | Kimi reasoning line | +| 2025 | DeepSeek-R1 / R1-Zero / distillation | https://arxiv.org/abs/2501.12948 | Pure RL emergence; then multi-stage + distill | Distill reasoning patterns | +| 2025 | On-policy distillation (Thinking Machines Lab) | https://thinkingmachines.ai/blog/on-policy-distillation/ **`[blog; K3 cites as Connectionism note]`** | Student on-policy w.r.t teacher | **MOPD** conceptual parent | +| 2026 | MiMo-V2-Flash Technical Report (multi-teacher mention lineage) | https://arxiv.org/abs/2601.02780 | Related multi-teacher post-train | Peer system cited by K3 | +| 2026 | Kimi K3 multi-effort RL + **MOPD** | https://arxiv.org/abs/2607.24653 | Domain experts {general, agentic, coding} × {low, high, max} → single policy | Capstone post-train | + +**K3 MOPD (official):** on-policy student samples; multi-teacher logits/rewards consolidate specialists; top-k distill ablations showed no clear gain. + +--- + +## M14 — Agents, Environments, Multimodal (MoonViT-V2) + +**Prerequisites:** M13, M05 +**Why for K3:** agent harness modularization; AET; native vision-in-the-loop; MoonViT-V2 from scratch. + +### 14.1 Agent / tool / coding environments + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2023 | Toolformer | https://arxiv.org/abs/2302.04761 | Self-supervised tool API calls | Tool-use pretrain | +| 2023 | ReAct | https://arxiv.org/abs/2210.03629 | Interleave reason + act | Agent loop pattern | +| 2024 | SWE-bench | https://arxiv.org/abs/2310.06770 | Real GitHub issue resolution | Coding agent benchmark | +| 2024 | OSWorld | https://arxiv.org/abs/2404.07972 | Computer-use agents | GUI agent env | +| 2025 | Terminal-Bench | https://arxiv.org/abs/2502.14045 **`[confirm version K3 cites]`** | Hard CLI agent tasks | Terminal agents | +| 2025 | BrowseComp | https://arxiv.org/abs/2504.12516 | Browsing agents | Web agents | +| 2025 | Kimi K2 agentic data synthesis + joint RL | https://arxiv.org/abs/2507.20534 | Large synthetic tool trajectories | Kimi agent stack | +| 2026 | Kimi K2.5 Visual Agentic Intelligence | https://arxiv.org/abs/2602.02276 | Multimodal agents / swarm **`[swarm details in K2.5]`** | Vision agents | +| 2026 | Kimi K3 agent envs (pluggable harness, AET, knowledge graph) | https://arxiv.org/abs/2607.24653 | Avoid harness overfitting; long-horizon verifiers | Production agent RL data | + +### 14.2 Vision encoders → MoonViT-V2 + +| Year | Title | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2020 | An Image is Worth 16x16 Words (ViT) | https://arxiv.org/abs/2010.11929 | Transformer vision backbone | ViT era | +| 2021 | Learning Transferable Visual Models From Natural Language Supervision (CLIP) | https://arxiv.org/abs/2103.00020 | Contrastive vision–language pretrain | SigLIP-style inits | +| 2023 | SigLIP | https://arxiv.org/abs/2303.15343 | Sigmoid contrastive VL | Prior MoonViT init | +| 2024 | LLaVA-OneVision | https://arxiv.org/abs/2408.03326 | Unified single/multi-image/video tasks | Native-res VL practice | +| 2025 | Kimi-VL Technical Report (**MoonViT**) | https://arxiv.org/abs/2504.07491 | Native-resolution MoonViT + MoE LM | Moonshot VL stack | +| 2026 | Kimi K3 **MoonViT-V2** from-scratch NTP | https://arxiv.org/abs/2607.24653 | Drop SigLIP init for stability; match quality | K3 vision path | + +**K3 vision claim (official):** MoonViT-V2 ≈0.4B, 27 layers, RMSNorm, bias-free; shared image/video; 2×2 pixel-shuffle; up to 3584² in 1M context. + +--- + +## M15 — Capstone Systems: KDA Kernels, MoonEP, 1M Agentic RL, Serve + +**Prerequisites:** M05–M07, M10–M11, M13–M14 +**Why for K3:** makes 2.8T hybrid + 1M agentic RL trainable and deployable. + +| Year | Title / artifact | URL | Problem solved | Bridge to next | +|---|---|---|---|---| +| 2019 | Triton: Intermediate Language for Tiled NN Kernels | https://www.eecs.harvard.edu/~htk/publication/2019-mapl-tillet-kung-cox.pdf | Productive GPU kernels | FLA / custom attn | +| 2021 | GPipe | https://arxiv.org/abs/1811.06965 | Pipeline parallel | PP lineage | +| 2021 | Megatron-LM / efficient large-scale training | https://arxiv.org/abs/2104.04473 | 3D parallelism | Pretrain systems baseline | +| 2020 | ZeRO | https://arxiv.org/abs/1910.02054 | Shard optimizer states | Memory for huge models | +| 2024 | FLA: Flash Linear Attention library | https://github.com/fla-org/flash-linear-attention | Kernel zoo for linear/delta | KDA ops host | +| 2025 | DeepEP | https://github.com/deepseek-ai/DeepEP | Expert-parallel communication | MoonEP contrast | +| 2025 | DualPipe (in V3 report) | https://arxiv.org/abs/2412.19437 | Overlap MoE+PP | Pipeline bubbles | +| 2026 | FlashKDA | https://github.com/MoonshotAI/FlashKDA | CUTLASS chunkwise KDA | Train/prefill speed | +| 2026 | Kimi K3 **MoonEP** | https://arxiv.org/abs/2607.24653 | Perfect balance EP, static shapes, zero-copy, bounded redundant experts | 2.8T MoE train | +| 2026 | Kimi K3 1M agentic RL co-located system | https://arxiv.org/abs/2607.24653 | Partial rollouts, external KV retention, resumable sandboxes | Long-horizon RL | +| 2026 | Kimi K3 state-aware KDA prefix caching + MXFP4 serve | https://arxiv.org/abs/2607.24653 | Decode across hybrid state + quant experts | Production deployment | + +--- + +## 3. Module → K3 Ingredient Checklist + +| Module | Delivers toward K3 | +|---|---| +| M01–M02 | Transformer residual + PE literacy | +| M03 | MLA / Gated MLA | +| M04–M05 | KDA + hybrid 3:1 | +| M06 | Attention Residuals | +| M07 | Stable LatentMoE + QB vs aux-loss-free | +| M08 | Scaling 2.5× story + Per-Head Muon | +| M09 | DeepSeek dense comparator (MLA, FP8, MTP, DualPipe, GRPO, R1, DSA, V4) | +| M10 | MXFP4/MXFP8 QAT | +| M11 | 1M context + KCP | +| M12–M13 | Multi-effort RL + MOPD | +| M14 | Agent envs + MoonViT-V2 | +| M15 | MoonEP + 1M agentic RL systems | + +--- + +## 4. DeepSeek Coverage Matrix (Atlas “strong track”) + +| Topic | Primary | Module | Must-read density | +|---|---|---|---| +| DeepSeek LLM | 2401.02954 | M08/M09 | high | +| DeepSeekMoE | 2401.06066 | M07/M09 | high | +| V2 / MLA | 2405.04434 | M03/M09 | **core** | +| Math / GRPO | 2402.03300 | M13/M09 | **core** | +| V3 FP8 / MTP / aux-free / DualPipe | 2412.19437 | M09/M10/M15 | **core** | +| R1 / R1-Zero / distill | 2501.12948 (+ Nature DOI) | M13/M09 | **core** | +| V3.2 / DSA | 2512.02556 | M03/M09 | high | +| V4 (official later) | 2606.19348 | M06/M09/M11 | high (1M peer) | +| DeepEP | GitHub deepseek-ai/DeepEP | M15 | systems | + +--- + +## 5. Uncertain / Careful Claims + +| Claim | Status | +|---|---| +| K3 **2.5×** scaling efficiency vs K2 | Author-reported fit on OOD val curves (Fig. 7); **not independent replication** | +| Benchmarks vs Claude Fable 5 / GPT-5.6 Sol | Author suite; **external harness variance** possible | +| “First open 3T-class” marketing phrasing | Product language; verify total-param definitions (shared vs routed, embeddings, vision) | +| Exact MoonEP algorithm vs DeepEP | Described in K3 §5; **no standalone MoonEP paper** at time of roadmap | +| FlashKDA paper | Primarily **code artifact** + K3 description; limited standalone theory paper | +| LASP-2 arXiv number if used in syllabus | Double-check id before publishing student links | +| On-policy distillation “Connectionism” note | Blog-level primary; treat as concept source, not peer-reviewed algorithm paper | +| DeepSeek-V4 CSA/HCA vs K3 KDA | Parallel 1M-ctx designs; **do not equate** without side-by-side study | +| MoonViT-V2 “matches SigLIP init quality” | Author ablation claim (Fig. 6 + text) | +| Multi-effort exact reward formulas | Partially specified (thinking-token thresholds); full reward suite may be incomplete in report | + +--- + +## 6. Compact Reading Paths (for site UX) + +### Path A — “Understand K3 architecture in 12 papers” +1. Attention Is All You Need +2. FlashAttention-2 +3. DeepSeek-V2 (MLA) +4. Gated DeltaNet +5. Kimi Linear (KDA) +6. Attention Residuals +7. DeepSeekMoE +8. LatentMoE +9. Muon is Scalable +10. Microscaling (MXFP4) +11. DeepSeek-V3 (systems) +12. **Kimi K3** + +### Path B — “DeepSeek full stack (official only)” +DeepSeek LLM → DeepSeekMoE → DeepSeekMath/GRPO → V2/MLA → V3 → R1 → V3.2/DSA → V4 + +### Path C — “Post-train / agents” +InstructGPT → DPO → GRPO → R1 → k1.5 → K2 → K2.5 → K3 (MOPD + multi-effort + 1M agentic RL) + +--- + +## 7. Suggested Atlas Module Metadata (CMS fields) + +```yaml +module_id: M05 +title_zh: 混合注意力:KDA 与 Gated MLA +prerequisites: [M03, M04] +k3_tags: [KDA, GatedMLA, NoPE, hybrid-3to1] +primary_papers: 6 +estimated_hours: 8 +``` + +--- + +## 8. Source Log (what this roadmap used) + +| Source | Role | +|---|---| +| arXiv:2607.24653 K3 PDF text extract | Architecture, post-train, systems, bibliography | +| arXiv abstracts for DeepSeek V2/V3/V3.2/V4, R1, Math, MoE, LLM | Official lineage | +| arXiv:2510.26692 Kimi Linear | KDA definition | +| arXiv:2603.15031 AttnRes | Depth residual redesign | +| arXiv:2502.16982 / 2507.20534 | Muon / K2 | +| arXiv:2504.07491 / 2602.02276 | MoonViT / K2.5 | +| arXiv:2310.10537 + OCP MX | MXFP4 | +| arXiv:2601.18089 LatentMoE | Latent MoE naming/ancestry | + +--- + +*End of structured research notes — LLM Atlas / K3-anchored roadmap.* diff --git a/research/METHODOLOGY.md b/research/METHODOLOGY.md new file mode 100644 index 0000000..241ef17 --- /dev/null +++ b/research/METHODOLOGY.md @@ -0,0 +1,46 @@ +# 研究、引用与写作规范 + +## 来源优先级 + +1. **P0 一手论文**:arXiv、会议论文、期刊论文、作者正式技术报告。 +2. **P1 一手实现**:作者官方仓库、模型卡、训练/评测代码。 +3. **P2 官方说明**:实验室技术博客、产品文档、系统卡。 +4. **P3 独立复现**:有方法、代码和数据的第三方复现或评测。 +5. **P4 二手解释**:只用于发现线索,不承载关键事实。 + +正文关键结论原则上至少有一个 P0/P1 来源。模型发布当日尚无论文时,可以临时使用 P2,并清楚标注。 + +## 三类句子 + +- **事实**:论文明确报告的架构、数据、实验或结论,可直接引用。 +- **解释**:为了教学而做的类比、拆解和重绘,标为“直觉解释”。 +- **推断**:跨论文比较或报告未直接说明的因果判断,标为“我们的推断”并写出依据。 + +## 论文卡字段 + +- 稳定 ID、标题、作者/机构、年份; +- canonical URL、arXiv/DOI、发表状态; +- 所属专题、先修概念、后继工作; +- 它解决的问题、核心机制、关键证据; +- 一句话直觉、关键公式、图表索引; +- 限制、复现状态、与 K3/DeepSeek 的关系; +- 核验状态、核验日期、核验人/工具。 + +## 图表规范 + +- 优先原创重绘 SVG/HTML,可缩放并支持键盘阅读。 +- 图题必须说明“原创示意”“依据某图改绘”或“原图引用”。 +- 简化图不能伪装成模型的逐算子精确实现。 +- 图中颜色始终保持语义一致:蓝色表示信息流,铜色表示稀疏选择,绿色表示训练/验证反馈,紫色表示系统状态。 + +## 质量闸门 + +章节从草稿到发布依次通过: + +1. 结构检查:问题链是否完整; +2. 事实检查:数字、版本、时间、公式; +3. 来源检查:链接可达、引用贴近结论; +4. 教学检查:术语首次出现有解释,图能独立读懂; +5. 对照检查:K3/DeepSeek 映射是否准确; +6. 可访问性检查:键盘、对比度、移动端、减少动画; +7. 构建与链接检查。 diff --git a/research/sources/README.md b/research/sources/README.md new file mode 100644 index 0000000..af13453 --- /dev/null +++ b/research/sources/README.md @@ -0,0 +1,12 @@ +# 本地来源缓存 + +这里用于研究期间缓存论文 PDF、网页快照与文本抽取。二进制和全文缓存默认被 `.gitignore` 排除;公开仓库只提交 canonical URL、校验信息、研究笔记和允许再分发的原创内容。 + +当前锚点: + +- Kimi K3 Technical Report + +- Kimi K3 official repository + +- arXiv:2607.24653 + diff --git a/src/components/ArchitectureExplorer.astro b/src/components/ArchitectureExplorer.astro new file mode 100644 index 0000000..7cbf662 --- /dev/null +++ b/src/components/ArchitectureExplorer.astro @@ -0,0 +1,412 @@ +--- +const axes = [ + { + id: "token", + label: "序列 / Token", + title: "KDA × Gated MLA:让一百万 Token 既高效流动,也保留全局精确交互", + plain: "三层 KDA 像持续更新的“工作记忆”,每四层插入一层全局 MLA,像定期把整本笔记摊开重看。", + points: ["3 个 KDA 层 + 1 个 Gated MLA 层为一组", "主干共 69 层 KDA、24 层 Gated MLA", "KDA 线性扩展;MLA 周期性补足全局两两交互"], + source: "K3 §2.1", + }, + { + id: "depth", + label: "深度 / Layer", + title: "Attention Residuals:每一层不只接住上一步,而是有选择地回看更早层", + plain: "普通残差像接力棒,只能拿到累加后的结果;AttnRes 更像档案索引,可以挑选哪一层的中间表示最有用。", + points: ["学习 pseudo-query,计算跨层注意力权重", "覆盖 embedding、当前 block 与先前 block", "目标是改善 93 层网络中的信息与梯度流"], + source: "K3 §2.2", + }, + { + id: "channel", + label: "宽度 / Expert", + title: "Stable LatentMoE:896 位专家里,每个 Token 只请 16 位", + plain: "模型把“知识容量”和“本次计算量”拆开:专家库很大,但每次只激活最匹配的一小组。", + points: ["2.8T 总参数,约 104B 激活参数", "896 个 routed experts,另有 2 个 shared experts", "Normalized LatentMoE、SiTU-GLU、Quantile Balancing 稳住极稀疏路由"], + source: "K3 §2.3", + }, + { + id: "vision", + label: "视觉 / Input", + title: "MoonViT-V2:图像不是外部 OCR 结果,而是进入同一主干的视觉 Token", + plain: "视觉编码器先把图像压成一串向量,再由轻量投影器把它们放进和文字相同的表示空间。", + points: ["401M 参数视觉编码器", "训练中联合文本、图像与视频数据", "支持视觉反馈闭环:看截图、改代码、再次验证"], + source: "K3 §2.4", + }, + { + id: "system", + label: "系统 / Scale", + title: "算法—系统协同:模型结构必须能在真实集群上被训练、强化学习和服务", + plain: "一个公式只有在 GPU 内核、跨卡通信、显存和调度上都跑得通,才真正成为 2.8T 模型的一部分。", + points: ["FlashKDA 与 KDA Context Parallelism", "MoonEP 的平衡专家并行与零拷贝通信", "长上下文 RL 的外置 KV Cache、可恢复 microVM 沙箱与部分 rollout"], + source: "K3 §5", + }, +]; +--- + +
+
+ + Kimi K3 三维信息流简化图 + 文字与图像进入模型后,依次通过由 KDA、Gated MLA 和 Stable LatentMoE 组成的模块;Attention Residuals 连接不同深度的表示。 + + + + + + + + + + + + + + + + + + + + + + MoonViT + + + + + Embedding + 共享表示空间 + + + + + + KDA + 线性工作记忆 + × 3 + + + + + Gated MLA + 压缩的全局注意力 + × 1 + + + + + 下一个 + Token + + + + + Stable LatentMoE + 896 → 16 experts + + + + + + Stable LatentMoE + 896 → 16 experts + + + + + + Attention Residuals · 跨层选择 + + + + + FlashKDA · MoonEP · 1M RL · Prefix Cache · Fleet Scheduling + + +

图 01 Kimi K3 架构的教学化简图。它强调 token、depth、channel 三个信息流维度,不代表逐算子实现;依据 K3 Technical Report Figure 2 与 §2 重绘。

+
+ +
+ {axes.map((axis, index) => ( + + ))} +
+ +
+ {axes.map((axis, index) => ( + + ))} +
+
+ + + + diff --git a/src/components/AttentionLab.astro b/src/components/AttentionLab.astro new file mode 100644 index 0000000..c35b001 --- /dev/null +++ b/src/components/AttentionLab.astro @@ -0,0 +1,227 @@ +--- +const tokens = ["小猫", "坐在", "柔软的", "垫子", "上"]; +const weights = [ + [0.44, 0.14, 0.08, 0.26, 0.08], + [0.31, 0.24, 0.08, 0.25, 0.12], + [0.07, 0.08, 0.26, 0.51, 0.08], + [0.25, 0.09, 0.32, 0.27, 0.07], + [0.07, 0.15, 0.05, 0.55, 0.18], +]; +--- + +
+
+
+ INTERACTIVE / SELF-ATTENTION +

点一个词,看它“回头看”谁

+
+

示意权重不是训练模型的真实输出;它只帮助理解一次注意力查询的流程。

+
+ +
+ {tokens.map((token, index) => ( + + ))} +
+ +
+
+ QUERY / 我正在理解 + +

Query 是当前词提出的问题:“为了更新我的表示,我应该从哪些词取信息?”

+
+
+ {tokens.map((token, index) => ( +
+ {token} +
+ {Math.round(weights[4][index] * 100)}% +
+ ))} +
+
+ +
图 02 单个注意力头的教学示意。真正的模型会在每一层、每个头上并行进行类似计算,权重由 QKᵀ 经缩放和 softmax 得到。
+
+ + + + diff --git a/src/components/DeepSeekLineage.astro b/src/components/DeepSeekLineage.astro new file mode 100644 index 0000000..2e6b84e --- /dev/null +++ b/src/components/DeepSeekLineage.astro @@ -0,0 +1,152 @@ +--- +const milestones = [ + { + year: "2024.01", + model: "DeepSeek LLM", + idea: "公开尺度规律与中英双语预训练,建立 7B / 67B dense 基线。", + bridge: "先弄清规模、数据与训练配方,再做稀疏化。", + url: "https://arxiv.org/abs/2401.02954", + }, + { + year: "2024.01", + model: "DeepSeekMoE", + idea: "细粒度专家分割 + shared experts,让专家更专、公共知识不必重复。", + bridge: "把容量扩张和每 Token 计算量分开。", + url: "https://arxiv.org/abs/2401.06066", + }, + { + year: "2024.05", + model: "DeepSeek-V2", + idea: "MLA 压缩 KV Cache;DeepSeekMoE 扩张稀疏容量。", + bridge: "训练经济性之外,开始直接优化推理内存与吞吐。", + url: "https://arxiv.org/abs/2405.04434", + }, + { + year: "2024.12", + model: "DeepSeek-V3", + idea: "671B-A37B、FP8 训练、无辅助损失负载均衡、MTP 与 DualPipe。", + bridge: "模型算法、数值格式与集群通信共同设计。", + url: "https://arxiv.org/abs/2412.19437", + }, + { + year: "2025.01", + model: "DeepSeek-R1", + idea: "R1-Zero 展示纯大规模 RL 可涌现推理;R1 用冷启动数据修复可读性与稳定性。", + bridge: "从“模仿答案”转向用可验证奖励塑造推理策略。", + url: "https://arxiv.org/abs/2501.12948", + }, + { + year: "2025.12", + model: "DeepSeek-V3.2", + idea: "DeepSeek Sparse Attention 降低长上下文成本,并统一 thinking 与 tool use。", + bridge: "把推理模型推进长上下文 Agent 场景。", + url: "https://arxiv.org/abs/2512.02556", + }, + { + year: "2026.06", + model: "DeepSeek-V4", + idea: "围绕百万 Token 上下文效率继续扩展,成为 K3 报告直接比较的开放前沿之一。", + bridge: "长上下文不再只是位置外推,而是注意力、训练与服务的全系统问题。", + url: "https://arxiv.org/abs/2606.19348", + }, +]; +--- + + + + diff --git a/src/components/SiteFooter.astro b/src/components/SiteFooter.astro new file mode 100644 index 0000000..dad26e7 --- /dev/null +++ b/src/components/SiteFooter.astro @@ -0,0 +1,13 @@ + diff --git a/src/components/SiteHeader.astro b/src/components/SiteHeader.astro new file mode 100644 index 0000000..261a704 --- /dev/null +++ b/src/components/SiteHeader.astro @@ -0,0 +1,50 @@ +--- +interface Props { + active?: string; +} + +const { active = "" } = Astro.props; +const items = [ + { id: "home", href: "/", label: "首页" }, + { id: "roadmap", href: "/roadmap/", label: "学习地图" }, + { id: "k3", href: "/k3/", label: "K3 解剖" }, + { id: "deepseek", href: "/deepseek/", label: "DeepSeek" }, + { id: "foundations", href: "/foundations/", label: "基础原理" }, + { id: "papers", href: "/papers/", label: "论文库" }, + { id: "progress", href: "/progress/", label: "进度" }, +]; +--- + + + + diff --git a/src/data/chapters.ts b/src/data/chapters.ts new file mode 100644 index 0000000..e3f7e5d --- /dev/null +++ b/src/data/chapters.ts @@ -0,0 +1,233 @@ +export type ChapterStatus = "published" | "drafting" | "researching" | "queued"; + +export interface Chapter { + number: string; + slug: string; + title: string; + kicker: string; + question: string; + summary: string; + status: ChapterStatus; + progress: number; + papers: number; + prerequisites: string[]; + highlights: string[]; +} + +export const chapters: Chapter[] = [ + { + number: "00", + slug: "roadmap", + title: "先看懂一张大模型地图", + kicker: "ORIENTATION", + question: "面对几百个术语,我们究竟先学什么?", + summary: "建立问题链、依赖关系、论文阅读方法和证据等级;把 K3 放回完整技术地图。", + status: "published", + progress: 72, + papers: 12, + prerequisites: [], + highlights: ["四层难度", "一张依赖图", "阅读路径"], + }, + { + number: "01", + slug: "foundations/language-models", + title: "语言模型从哪里来", + kicker: "LANGUAGE MODELING", + question: "预测下一个 Token,为什么能产生通用能力?", + summary: "从 N-gram、神经概率语言模型、词向量一路走到 Seq2Seq,理解 Transformer 出现前的瓶颈。", + status: "researching", + progress: 24, + papers: 10, + prerequisites: [], + highlights: ["概率分解", "分布式表示", "序列瓶颈"], + }, + { + number: "02", + slug: "foundations", + title: "注意力与 Transformer", + kicker: "TRANSFORMER", + question: "一句话里的每个词,怎样直接找到真正相关的词?", + summary: "用可操作的小例子拆开 Q、K、V、自注意力、多头、因果掩码、残差与前馈网络。", + status: "published", + progress: 45, + papers: 12, + prerequisites: ["01"], + highlights: ["Q / K / V", "交互实验", "张量形状"], + }, + { + number: "03", + slug: "architecture/representation", + title: "表示、位置与残差高速公路", + kicker: "REPRESENTATION", + question: "模型如何知道词序,又如何让信息穿过上百层?", + summary: "从分词、位置编码、归一化与激活函数,走到深层网络的信息流和 Attention Residuals。", + status: "researching", + progress: 18, + papers: 16, + prerequisites: ["02"], + highlights: ["RoPE", "RMSNorm", "AttnRes"], + }, + { + number: "04", + slug: "scaling", + title: "Scaling Laws:规模为什么有效", + kicker: "SCALING", + question: "多大模型、多少数据、多少计算才是划算的?", + summary: "区分参数量、激活参数、训练计算和推理预算;理解 Kaplan、Chinchilla 与 K3 的双轴扩展。", + status: "researching", + progress: 22, + papers: 11, + prerequisites: ["01", "02"], + highlights: ["幂律", "计算最优", "测试时扩展"], + }, + { + number: "05", + slug: "pretraining/data", + title: "数据工程与预训练配方", + kicker: "DATA", + question: "更多网页为什么不等于更好的模型?", + summary: "追踪采集、过滤、去重、混合、课程、合成数据与污染控制,并明确公开报告的知识边界。", + status: "queued", + progress: 8, + papers: 14, + prerequisites: ["01", "04"], + highlights: ["数据质量", "混合策略", "污染"], + }, + { + number: "06", + slug: "architecture/moe", + title: "稀疏计算与 MoE", + kicker: "SPARSE EXPERTS", + question: "怎样让模型装下更多知识,却不让每个 Token 都付全部算力?", + summary: "从条件计算到 DeepSeekMoE、LatentMoE 与 K3 Stable LatentMoE,解释路由、特化和负载均衡。", + status: "researching", + progress: 28, + papers: 17, + prerequisites: ["02", "04"], + highlights: ["专家路由", "细粒度专家", "896 选 16"], + }, + { + number: "07", + slug: "architecture/long-context", + title: "长上下文与高效注意力", + kicker: "LONG CONTEXT", + question: "从 8K 到 1M Token,真正昂贵的是什么?", + summary: "比较稀疏/线性注意力、FlashAttention、MLA、状态空间模型、Delta Rule、KDA 与混合注意力。", + status: "researching", + progress: 31, + papers: 24, + prerequisites: ["02", "03"], + highlights: ["KV Cache", "MLA", "KDA"], + }, + { + number: "08", + slug: "systems/training", + title: "大规模训练系统", + kicker: "DISTRIBUTED TRAINING", + question: "一个 2.8T 模型如何摊到成千上万张卡上?", + summary: "从 ZeRO、Megatron 和五类并行,走到 DeepSeek DualPipe/DeepEP 与 K3 MoonEP。", + status: "queued", + progress: 12, + papers: 18, + prerequisites: ["04", "06"], + highlights: ["并行维度", "通信重叠", "MoonEP"], + }, + { + number: "09", + slug: "systems/numerics", + title: "数值精度、优化器与稳定性", + kicker: "OPTIMIZATION", + question: "为什么少几个比特能省巨资,也可能让训练瞬间崩掉?", + summary: "解释 AdamW、μP、Muon、BF16/FP8/MXFP4 与量化感知训练的数值直觉。", + status: "queued", + progress: 13, + papers: 16, + prerequisites: ["02", "08"], + highlights: ["FP8", "Muon", "MXFP4"], + }, + { + number: "10", + slug: "post-training/alignment", + title: "指令微调与人类偏好", + kicker: "ALIGNMENT", + question: "会续写的 base model,怎样变成愿意协作的助手?", + summary: "从 instruction tuning、SFT、RLHF/PPO 到 DPO 与 RLAIF,区分能力学习和行为塑形。", + status: "queued", + progress: 10, + papers: 18, + prerequisites: ["01", "02"], + highlights: ["SFT", "奖励模型", "偏好优化"], + }, + { + number: "11", + slug: "reasoning", + title: "推理模型与测试时扩展", + kicker: "REASONING", + question: "模型如何学会多想一会儿,并检查自己的答案?", + summary: "从 CoT、搜索与验证器,到 GRPO、DeepSeek-R1、Kimi k1.5 和 multi-effort RL。", + status: "researching", + progress: 25, + papers: 21, + prerequisites: ["10"], + highlights: ["GRPO", "R1-Zero", "On-policy 蒸馏"], + }, + { + number: "12", + slug: "agents", + title: "工具使用与长程 Agent", + kicker: "AGENTS", + question: "生成一段文字,怎样变成持续数小时的可靠行动?", + summary: "讨论工具协议、行动—观察循环、环境奖励、沙箱、可验证任务与百万 Token 轨迹。", + status: "queued", + progress: 14, + papers: 22, + prerequisites: ["10", "11"], + highlights: ["ReAct", "沙箱", "长轨迹 RL"], + }, + { + number: "13", + slug: "multimodal", + title: "原生多模态", + kicker: "MULTIMODAL", + question: "图像是外接插件,还是和文字一样的第一类输入?", + summary: "从 ViT/CLIP、连接器式 VLM 走到 Kimi-VL、MoonViT-V2 与统一主干。", + status: "queued", + progress: 11, + papers: 19, + prerequisites: ["02"], + highlights: ["ViT", "视觉 Token", "MoonViT-V2"], + }, + { + number: "14", + slug: "systems/inference", + title: "推理服务与低成本部署", + kicker: "INFERENCE", + question: "模型训练完以后,怎样让千万人用得起?", + summary: "拆解 KV Cache、PagedAttention、批处理、推测解码、PD 解耦、前缀缓存与集群调度。", + status: "queued", + progress: 12, + papers: 20, + prerequisites: ["07", "08", "09"], + highlights: ["vLLM", "Mooncake", "KDA 缓存"], + }, + { + number: "15", + slug: "evaluation", + title: "评测、安全与“到底强不强”", + kicker: "EVALUATION", + question: "一个榜单分数,究竟测到了模型、脚手架还是预算?", + summary: "从语言建模指标走到知识、代码、Agent 和多模态评测,识别污染、harness 与选择性报告。", + status: "queued", + progress: 13, + papers: 24, + prerequisites: ["04", "10", "12"], + highlights: ["基准演化", "Harness", "安全边界"], + }, +]; + +export const statusLabel: Record = { + published: "首版可读", + drafting: "写作中", + researching: "研究中", + queued: "待展开", +}; diff --git a/src/data/papers.ts b/src/data/papers.ts new file mode 100644 index 0000000..05f8a0a --- /dev/null +++ b/src/data/papers.ts @@ -0,0 +1,1058 @@ +export type PaperTopic = + | "基础" + | "Transformer" + | "长上下文" + | "MoE" + | "Scaling" + | "训练系统" + | "低精度" + | "后训练" + | "推理" + | "Agent" + | "多模态" + | "评测"; + +export interface Paper { + year: number; + title: string; + url: string; + topics: PaperTopic[]; + contribution: string; + spotlight?: "Kimi" | "DeepSeek"; + verified: boolean; +} + +export const papers: Paper[] = [ + { + year: 1948, + title: "A Mathematical Theory of Communication", + url: "https://doi.org/10.1002/j.1538-7305.1948.tb01338.x", + topics: ["基础"], + contribution: "信息熵与序列概率的理论起点。", + verified: true, + }, + { + year: 2003, + title: "A Neural Probabilistic Language Model", + url: "https://www.jmlr.org/papers/v3/bengio03a.html", + topics: ["基础"], + contribution: "用分布式词表示和神经网络突破 N-gram 稀疏泛化。", + verified: true, + }, + { + year: 2013, + title: "Efficient Estimation of Word Representations in Vector Space", + url: "https://arxiv.org/abs/1301.3781", + topics: ["基础"], + contribution: "Word2Vec 把大规模词向量训练变得简单高效。", + verified: true, + }, + { + year: 2014, + title: "Sequence to Sequence Learning with Neural Networks", + url: "https://arxiv.org/abs/1409.3215", + topics: ["基础"], + contribution: "Encoder—decoder 统一可变长序列映射,也暴露固定向量瓶颈。", + verified: true, + }, + { + year: 2014, + title: "Neural Machine Translation by Jointly Learning to Align and Translate", + url: "https://arxiv.org/abs/1409.0473", + topics: ["基础", "Transformer"], + contribution: "用可微软对齐让 decoder 直接检索全部 encoder state。", + verified: true, + }, + { + year: 2015, + title: "Neural Machine Translation of Rare Words with Subword Units", + url: "https://arxiv.org/abs/1508.07909", + topics: ["基础"], + contribution: "把 BPE 引入神经机器翻译,形成现代子词分词主线。", + verified: true, + }, + { + year: 2017, + title: "Attention Is All You Need", + url: "https://arxiv.org/abs/1706.03762", + topics: ["Transformer"], + contribution: "用多头自注意力与 FFN 取代循环,开启高度并行预训练。", + verified: true, + }, + { + year: 2018, + title: "SentencePiece: A simple and language independent subword tokenizer", + url: "https://arxiv.org/abs/1808.06226", + topics: ["基础"], + contribution: "直接从原始句子训练语言无关子词模型。", + verified: true, + }, + { + year: 2018, + title: "Improving Language Understanding by Generative Pre-Training", + url: "https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf", + topics: ["Transformer", "Scaling"], + contribution: "GPT-1 建立 decoder-only 生成式预训练再迁移的路线。", + verified: true, + }, + { + year: 2018, + title: "BERT: Pre-training of Deep Bidirectional Transformers", + url: "https://arxiv.org/abs/1810.04805", + topics: ["Transformer"], + contribution: "双向 masked language modeling 验证大规模预训练表示。", + verified: true, + }, + { + year: 2019, + title: "Language Models are Unsupervised Multitask Learners", + url: "https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf", + topics: ["Transformer", "Scaling"], + contribution: "GPT-2 展示规模扩大后的零样本任务迁移。", + verified: true, + }, + { + year: 2019, + title: "Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer", + url: "https://arxiv.org/abs/1910.10683", + topics: ["Transformer", "Scaling"], + contribution: "T5 统一 text-to-text 接口并系统研究架构与数据。", + verified: true, + }, + { + year: 2019, + title: "Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context", + url: "https://arxiv.org/abs/1901.02860", + topics: ["Transformer", "长上下文"], + contribution: "跨 segment recurrence 与相对位置,突破固定窗口。", + verified: true, + }, + { + year: 2019, + title: "Root Mean Square Layer Normalization", + url: "https://arxiv.org/abs/1910.07467", + topics: ["Transformer"], + contribution: "不做均值中心化的轻量归一化,成为现代 LLM 常用组件。", + verified: true, + }, + { + year: 2020, + title: "Language Models are Few-Shot Learners", + url: "https://arxiv.org/abs/2005.14165", + topics: ["Transformer", "Scaling"], + contribution: "GPT-3 展示规模扩大后 in-context learning 的通用接口。", + verified: true, + }, + { + year: 2020, + title: "GLU Variants Improve Transformer", + url: "https://arxiv.org/abs/2002.05202", + topics: ["Transformer"], + contribution: "系统比较 GLU 变体,SwiGLU 进入现代 FFN 配方。", + verified: true, + }, + { + year: 2020, + title: "Longformer: The Long-Document Transformer", + url: "https://arxiv.org/abs/2004.05150", + topics: ["长上下文"], + contribution: "局部滑窗加少量全局 Token,将长文档 attention 稀疏化。", + verified: true, + }, + { + year: 2020, + title: "Reformer: The Efficient Transformer", + url: "https://arxiv.org/abs/2001.04451", + topics: ["长上下文"], + contribution: "LSH attention 与可逆层降低长序列时间和内存。", + verified: true, + }, + { + year: 2020, + title: "Linformer: Self-Attention with Linear Complexity", + url: "https://arxiv.org/abs/2006.04768", + topics: ["长上下文"], + contribution: "用低秩投影压缩序列维,使 attention 近似线性。", + verified: true, + }, + { + year: 2020, + title: "Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention", + url: "https://arxiv.org/abs/2006.16236", + topics: ["长上下文"], + contribution: "核化 attention 获得线性复杂度与递归推理形式。", + verified: true, + }, + { + year: 2020, + title: "Rethinking Attention with Performers", + url: "https://arxiv.org/abs/2009.14794", + topics: ["长上下文"], + contribution: "用随机特征近似 softmax attention,兼顾无偏与线性复杂度。", + verified: true, + }, + { + year: 2021, + title: "Linear Transformers Are Secretly Fast Weight Programmers", + url: "https://arxiv.org/abs/2102.11174", + topics: ["长上下文"], + contribution: "把线性 attention 解释为 fast weights,并引入 delta update 视角。", + verified: true, + }, + { + year: 2021, + title: "RoFormer: Enhanced Transformer with Rotary Position Embedding", + url: "https://arxiv.org/abs/2104.09864", + topics: ["Transformer", "长上下文"], + contribution: "用旋转把绝对位置注入点积并自然表达相对距离。", + verified: true, + }, + { + year: 2021, + title: "Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation", + url: "https://arxiv.org/abs/2108.12409", + topics: ["长上下文"], + contribution: "ALiBi 用线性距离偏置实现长度外推。", + verified: true, + }, + { + year: 2022, + title: "FlashAttention: Fast and Memory-Efficient Exact Attention", + url: "https://arxiv.org/abs/2205.14135", + topics: ["长上下文", "训练系统"], + contribution: "以 IO-aware tiling 实现精确 attention,不写出完整矩阵。", + verified: true, + }, + { + year: 2023, + title: "FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning", + url: "https://arxiv.org/abs/2307.08691", + topics: ["长上下文", "训练系统"], + contribution: "改进工作分割与并行度,提高训练和 prefill 吞吐。", + verified: true, + }, + { + year: 2019, + title: "Fast Transformer Decoding: One Write-Head is All You Need", + url: "https://arxiv.org/abs/1911.02150", + topics: ["长上下文", "训练系统"], + contribution: "MQA 让 Query heads 共享 K/V,大幅缩小解码缓存。", + verified: true, + }, + { + year: 2023, + title: "GQA: Training Generalized Multi-Query Transformer Models", + url: "https://arxiv.org/abs/2305.13245", + topics: ["长上下文", "训练系统"], + contribution: "在 MHA 表达力与 MQA 缓存效率之间分组折中。", + verified: true, + }, + { + year: 2023, + title: "Extending Context Window of Large Language Models via Positional Interpolation", + url: "https://arxiv.org/abs/2306.15595", + topics: ["长上下文"], + contribution: "压缩位置索引,让 RoPE 模型稳定微调到更长窗口。", + verified: true, + }, + { + year: 2023, + title: "YaRN: Efficient Context Window Extension of Large Language Models", + url: "https://arxiv.org/abs/2309.00071", + topics: ["长上下文"], + contribution: "结合频率分区与注意力温度扩展 RoPE 上下文。", + verified: true, + }, + { + year: 2023, + title: "Ring Attention with Blockwise Transformers for Near-Infinite Context", + url: "https://arxiv.org/abs/2310.01889", + topics: ["长上下文", "训练系统"], + contribution: "环形传递 KV block,让序列长度随设备数扩展。", + verified: true, + }, + { + year: 2023, + title: "Retentive Network: A Successor to Transformer for Large Language Models", + url: "https://arxiv.org/abs/2307.08621", + topics: ["长上下文"], + contribution: "统一并行、递归和 chunkwise retention 计算。", + verified: true, + }, + { + year: 2023, + title: "Mamba: Linear-Time Sequence Modeling with Selective State Spaces", + url: "https://arxiv.org/abs/2312.00752", + topics: ["长上下文"], + contribution: "让状态空间参数随输入变化,建立现代线性序列模型路线。", + verified: true, + }, + { + year: 2024, + title: "Transformers are SSMs: Generalized Models and Efficient Algorithms Through Structured State Space Duality", + url: "https://arxiv.org/abs/2405.21060", + topics: ["长上下文"], + contribution: "用结构化状态空间对偶统一 attention 与 SSM 算法。", + verified: true, + }, + { + year: 2024, + title: "Gated Linear Attention Transformers with Hardware-Efficient Training", + url: "https://arxiv.org/abs/2312.06635", + topics: ["长上下文", "训练系统"], + contribution: "数据依赖 gate 与硬件高效 chunkwise 线性 attention。", + verified: true, + }, + { + year: 2024, + title: "Parallelizing Linear Transformers with the Delta Rule over Sequence Length", + url: "https://arxiv.org/abs/2406.06484", + topics: ["长上下文", "训练系统"], + contribution: "让 DeltaNet 在序列维并行训练。", + verified: true, + }, + { + year: 2025, + title: "Gated Delta Networks: Improving Mamba2 with Delta Rule", + url: "https://arxiv.org/abs/2412.06464", + topics: ["长上下文"], + contribution: "把快速遗忘 gate 与定点纠错 delta rule 合并。", + verified: true, + }, + { + year: 2024, + title: "Griffin: Mixing Gated Linear Recurrences with Local Attention", + url: "https://arxiv.org/abs/2402.19427", + topics: ["长上下文"], + contribution: "证明线性递归与局部 attention 的混合架构可扩展。", + verified: true, + }, + { + year: 2024, + title: "Jamba: A Hybrid Transformer-Mamba Language Model", + url: "https://arxiv.org/abs/2403.19887", + topics: ["长上下文", "MoE"], + contribution: "把 Transformer、Mamba 与 MoE 组合到生产级开放模型。", + verified: true, + }, + { + year: 2025, + title: "Kimi Linear: An Expressive, Efficient Attention Architecture", + url: "https://arxiv.org/abs/2510.26692", + topics: ["长上下文"], + contribution: "提出 KDA 并用 3:1 KDA/MLA 混合补足线性状态瓶颈。", + spotlight: "Kimi", + verified: true, + }, + { + year: 2026, + title: "Attention Residuals", + url: "https://arxiv.org/abs/2603.15031", + topics: ["Transformer", "长上下文"], + contribution: "让每层以 softmax 选择先前深度表示,并给出 Block AttnRes。", + spotlight: "Kimi", + verified: true, + }, + { + year: 2017, + title: "Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer", + url: "https://arxiv.org/abs/1701.06538", + topics: ["MoE"], + contribution: "现代稀疏门控 MoE 的起点,以条件计算扩张容量。", + verified: true, + }, + { + year: 2020, + title: "GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding", + url: "https://arxiv.org/abs/2006.16668", + topics: ["MoE", "训练系统"], + contribution: "把 MoE、自动切分与大规模 TPU 训练连接起来。", + verified: true, + }, + { + year: 2021, + title: "Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity", + url: "https://arxiv.org/abs/2101.03961", + topics: ["MoE"], + contribution: "用 top-1 路由简化稀疏模型并扩到万亿参数。", + verified: true, + }, + { + year: 2021, + title: "BASE Layers: Simplifying Training of Large, Sparse Models", + url: "https://arxiv.org/abs/2103.16716", + topics: ["MoE"], + contribution: "以线性分配求解专家负载平衡,减少辅助损失。", + verified: true, + }, + { + year: 2021, + title: "GLaM: Efficient Scaling of Language Models with Mixture-of-Experts", + url: "https://arxiv.org/abs/2112.06905", + topics: ["MoE", "Scaling"], + contribution: "展示 MoE 在能耗与推理计算上高效扩展语言模型。", + verified: true, + }, + { + year: 2022, + title: "ST-MoE: Designing Stable and Transferable Sparse Expert Models", + url: "https://arxiv.org/abs/2202.08906", + topics: ["MoE"], + contribution: "系统化稀疏专家的稳定训练与迁移配方。", + verified: true, + }, + { + year: 2024, + title: "Mixtral of Experts", + url: "https://arxiv.org/abs/2401.04088", + topics: ["MoE"], + contribution: "强开放稀疏模型,普及每层 top-2 experts 的工程实践。", + verified: true, + }, + { + year: 2024, + title: "DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models", + url: "https://arxiv.org/abs/2401.06066", + topics: ["MoE"], + contribution: "细粒度专家分割与 shared expert isolation。", + spotlight: "DeepSeek", + verified: true, + }, + { + year: 2024, + title: "DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model", + url: "https://arxiv.org/abs/2405.04434", + topics: ["MoE", "长上下文", "训练系统"], + contribution: "联合 DeepSeekMoE 与 MLA,直接压缩推理 KV Cache。", + spotlight: "DeepSeek", + verified: true, + }, + { + year: 2024, + title: "DeepSeek-V3 Technical Report", + url: "https://arxiv.org/abs/2412.19437", + topics: ["MoE", "Scaling", "训练系统", "低精度"], + contribution: "671B-A37B;FP8、MTP、无辅助损失平衡与 DualPipe。", + spotlight: "DeepSeek", + verified: true, + }, + { + year: 2026, + title: "LatentMoE: Toward Optimal Accuracy per FLOP and Parameter in Mixture of Experts", + url: "https://arxiv.org/abs/2601.18089", + topics: ["MoE"], + contribution: "将完整模型宽度与路由专家宽度分离。", + verified: true, + }, + { + year: 2020, + title: "Scaling Laws for Neural Language Models", + url: "https://arxiv.org/abs/2001.08361", + topics: ["Scaling"], + contribution: "建立 loss 与参数、数据、计算之间的幂律经验关系。", + verified: true, + }, + { + year: 2022, + title: "Training Compute-Optimal Large Language Models", + url: "https://arxiv.org/abs/2203.15556", + topics: ["Scaling"], + contribution: "Chinchilla 修正参数/Token 配比,强调给定计算下更多数据。", + verified: true, + }, + { + year: 2022, + title: "Emergent Abilities of Large Language Models", + url: "https://arxiv.org/abs/2206.07682", + topics: ["Scaling", "评测"], + contribution: "记录若干能力随规模出现非线性跃迁的评测现象。", + verified: true, + }, + { + year: 2023, + title: "Pythia: A Suite for Analyzing Large Language Models Across Training and Scaling", + url: "https://arxiv.org/abs/2304.01373", + topics: ["Scaling", "评测"], + contribution: "公开训练中间 checkpoint,支持研究能力怎样随训练形成。", + verified: true, + }, + { + year: 2023, + title: "LLaMA: Open and Efficient Foundation Language Models", + url: "https://arxiv.org/abs/2302.13971", + topics: ["Scaling"], + contribution: "用更多 Token 训练较小开放模型,推动 compute-efficient 推理。", + verified: true, + }, + { + year: 2023, + title: "Llama 2: Open Foundation and Fine-Tuned Chat Models", + url: "https://arxiv.org/abs/2307.09288", + topics: ["Scaling", "后训练"], + contribution: "公开预训练、SFT、RLHF 与安全评测细节。", + verified: true, + }, + { + year: 2024, + title: "The Llama 3 Herd of Models", + url: "https://arxiv.org/abs/2407.21783", + topics: ["Scaling", "后训练"], + contribution: "大规模数据、405B dense、长上下文与多阶段后训练。", + verified: true, + }, + { + year: 2024, + title: "DeepSeek LLM: Scaling Open-Source Language Models with Longtermism", + url: "https://arxiv.org/abs/2401.02954", + topics: ["Scaling"], + contribution: "中英 dense 基线与公开 scaling-law 研究。", + spotlight: "DeepSeek", + verified: true, + }, + { + year: 2021, + title: "The Pile: An 800GB Dataset of Diverse Text for Language Modeling", + url: "https://arxiv.org/abs/2101.00027", + topics: ["Scaling"], + contribution: "公开多域预训练语料与数据配比研究基础。", + verified: true, + }, + { + year: 2023, + title: "The RefinedWeb Dataset for Falcon LLM", + url: "https://arxiv.org/abs/2306.01116", + topics: ["Scaling"], + contribution: "证明高质量过滤与去重的 Web 数据可以支撑强模型。", + verified: true, + }, + { + year: 2024, + title: "Dolma: an Open Corpus of Three Trillion Tokens for Language Model Pretraining Research", + url: "https://arxiv.org/abs/2402.00159", + topics: ["Scaling"], + contribution: "开放 3T Token 语料与完整数据处理工具。", + verified: true, + }, + { + year: 2014, + title: "Adam: A Method for Stochastic Optimization", + url: "https://arxiv.org/abs/1412.6980", + topics: ["训练系统"], + contribution: "自适应一阶/二阶矩估计,成为 LLM 优化器基线。", + verified: true, + }, + { + year: 2017, + title: "Decoupled Weight Decay Regularization", + url: "https://arxiv.org/abs/1711.05101", + topics: ["训练系统"], + contribution: "AdamW 将权重衰减与梯度更新正确解耦。", + verified: true, + }, + { + year: 2019, + title: "GPipe: Efficient Training of Giant Neural Networks using Pipeline Parallelism", + url: "https://arxiv.org/abs/1811.06965", + topics: ["训练系统"], + contribution: "用 micro-batch pipeline 把巨型网络跨设备切层。", + verified: true, + }, + { + year: 2019, + title: "Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism", + url: "https://arxiv.org/abs/1909.08053", + topics: ["训练系统"], + contribution: "建立 Transformer tensor parallel 的高效切分方式。", + verified: true, + }, + { + year: 2020, + title: "ZeRO: Memory Optimizations Toward Training Trillion Parameter Models", + url: "https://arxiv.org/abs/1910.02054", + topics: ["训练系统"], + contribution: "分片优化器、梯度与参数,消除数据并行状态冗余。", + verified: true, + }, + { + year: 2023, + title: "DeepSpeed Ulysses: System Optimizations for Enabling Training of Extreme Long Sequence Transformer Models", + url: "https://arxiv.org/abs/2309.14509", + topics: ["训练系统", "长上下文"], + contribution: "沿 attention head 做 sequence parallel,扩展极长序列训练。", + verified: true, + }, + { + year: 2024, + title: "Mooncake: A KVCache-centric Disaggregated Architecture for LLM Serving", + url: "https://arxiv.org/abs/2407.00079", + topics: ["训练系统", "长上下文"], + contribution: "以 KV Cache 为中心解耦 prefill/decode 资源。", + spotlight: "Kimi", + verified: true, + }, + { + year: 2025, + title: "Muon is Scalable for LLM Training", + url: "https://arxiv.org/abs/2502.16982", + topics: ["训练系统"], + contribution: "补足 Muon 在 LLM 规模的权重衰减与更新尺度配方。", + spotlight: "Kimi", + verified: true, + }, + { + year: 2022, + title: "FP8 Formats for Deep Learning", + url: "https://arxiv.org/abs/2209.05433", + topics: ["低精度", "训练系统"], + contribution: "定义适合训练/推理的 E4M3 与 E5M2 FP8 格式。", + verified: true, + }, + { + year: 2023, + title: "Microscaling Data Formats for Deep Learning", + url: "https://arxiv.org/abs/2310.10537", + topics: ["低精度"], + contribution: "以 block 共享 scale 支持 MXFP4/MXFP8 等 microscaling 格式。", + verified: true, + }, + { + year: 2022, + title: "LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale", + url: "https://arxiv.org/abs/2208.07339", + topics: ["低精度"], + contribution: "分离离群通道,在保持精度下做 8-bit 推理。", + verified: true, + }, + { + year: 2022, + title: "SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models", + url: "https://arxiv.org/abs/2211.10438", + topics: ["低精度"], + contribution: "把 activation 难量化程度离线迁移到权重。", + verified: true, + }, + { + year: 2022, + title: "GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers", + url: "https://arxiv.org/abs/2210.17323", + topics: ["低精度"], + contribution: "基于近似二阶信息逐层量化大模型权重。", + verified: true, + }, + { + year: 2023, + title: "AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration", + url: "https://arxiv.org/abs/2306.00978", + topics: ["低精度"], + contribution: "保护少量高影响权重通道的 activation-aware 量化。", + verified: true, + }, + { + year: 2017, + title: "Proximal Policy Optimization Algorithms", + url: "https://arxiv.org/abs/1707.06347", + topics: ["后训练"], + contribution: "用 clipped ratio 稳定 on-policy 策略更新。", + verified: true, + }, + { + year: 2020, + title: "Learning to Summarize with Human Feedback", + url: "https://arxiv.org/abs/2009.01325", + topics: ["后训练"], + contribution: "把人类偏好、奖励模型与策略优化应用到生成任务。", + verified: true, + }, + { + year: 2021, + title: "Finetuned Language Models Are Zero-Shot Learners", + url: "https://arxiv.org/abs/2109.01652", + topics: ["后训练"], + contribution: "FLAN 证明多任务指令微调可提升未见任务零样本表现。", + verified: true, + }, + { + year: 2021, + title: "Multitask Prompted Training Enables Zero-Shot Task Generalization", + url: "https://arxiv.org/abs/2110.08207", + topics: ["后训练"], + contribution: "T0 用大规模提示模板训练开放零样本模型。", + verified: true, + }, + { + year: 2022, + title: "Training Language Models to Follow Instructions with Human Feedback", + url: "https://arxiv.org/abs/2203.02155", + topics: ["后训练"], + contribution: "InstructGPT 建立 SFT → reward model → PPO 的 RLHF 标准管线。", + verified: true, + }, + { + year: 2022, + title: "Constitutional AI: Harmlessness from AI Feedback", + url: "https://arxiv.org/abs/2212.08073", + topics: ["后训练"], + contribution: "用原则、自我批评和 AI feedback 减少直接人工标签。", + verified: true, + }, + { + year: 2022, + title: "Self-Instruct: Aligning Language Models with Self-Generated Instructions", + url: "https://arxiv.org/abs/2212.10560", + topics: ["后训练"], + contribution: "从模型自生成、过滤指令数据扩展 instruction tuning。", + verified: true, + }, + { + year: 2023, + title: "Direct Preference Optimization: Your Language Model is Secretly a Reward Model", + url: "https://arxiv.org/abs/2305.18290", + topics: ["后训练"], + contribution: "把偏好优化改写为直接分类目标,省去在线 RL loop。", + verified: true, + }, + { + year: 2022, + title: "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models", + url: "https://arxiv.org/abs/2201.11903", + topics: ["推理"], + contribution: "用中间推理示例显著提升大模型复杂任务表现。", + verified: true, + }, + { + year: 2022, + title: "Self-Consistency Improves Chain of Thought Reasoning in Language Models", + url: "https://arxiv.org/abs/2203.11171", + topics: ["推理"], + contribution: "采样多条推理路径并对最终答案聚合。", + verified: true, + }, + { + year: 2022, + title: "STaR: Bootstrapping Reasoning With Reasoning", + url: "https://arxiv.org/abs/2203.14465", + topics: ["推理"], + contribution: "迭代生成、筛选并训练成功 rationale。", + verified: true, + }, + { + year: 2023, + title: "Tree of Thoughts: Deliberate Problem Solving with Large Language Models", + url: "https://arxiv.org/abs/2305.10601", + topics: ["推理", "Agent"], + contribution: "显式搜索多个 thought 分支并评估中间状态。", + verified: true, + }, + { + year: 2023, + title: "Let's Verify Step by Step", + url: "https://arxiv.org/abs/2305.20050", + topics: ["推理", "后训练"], + contribution: "过程奖励模型在数学推理中优于只看最终答案。", + verified: true, + }, + { + year: 2024, + title: "Quiet-STaR: Language Models Can Teach Themselves to Think Before Speaking", + url: "https://arxiv.org/abs/2403.09629", + topics: ["推理"], + contribution: "在一般文本 Token 之间学习隐式 rationale。", + verified: true, + }, + { + year: 2024, + title: "DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models", + url: "https://arxiv.org/abs/2402.03300", + topics: ["推理", "后训练"], + contribution: "数学数据管线与无独立 critic 的 GRPO。", + spotlight: "DeepSeek", + verified: true, + }, + { + year: 2025, + title: "DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning", + url: "https://arxiv.org/abs/2501.12948", + topics: ["推理", "后训练"], + contribution: "R1-Zero 纯 RL 涌现推理;R1 加冷启动、多阶段训练与蒸馏。", + spotlight: "DeepSeek", + verified: true, + }, + { + year: 2025, + title: "Kimi k1.5: Scaling Reinforcement Learning with LLMs", + url: "https://arxiv.org/abs/2501.12599", + topics: ["推理", "后训练"], + contribution: "扩展长 CoT 强化学习和测试时计算。", + spotlight: "Kimi", + verified: true, + }, + { + year: 2021, + title: "WebGPT: Browser-assisted Question-Answering with Human Feedback", + url: "https://arxiv.org/abs/2112.09332", + topics: ["Agent", "后训练"], + contribution: "让模型操作浏览器检索、引用来源并用人类偏好训练。", + verified: true, + }, + { + year: 2022, + title: "ReAct: Synergizing Reasoning and Acting in Language Models", + url: "https://arxiv.org/abs/2210.03629", + topics: ["Agent", "推理"], + contribution: "交错 reasoning、action 与 observation,建立 Agent loop 范式。", + verified: true, + }, + { + year: 2023, + title: "Toolformer: Language Models Can Teach Themselves to Use Tools", + url: "https://arxiv.org/abs/2302.04761", + topics: ["Agent"], + contribution: "自监督筛选能降低语言建模损失的 API 调用。", + verified: true, + }, + { + year: 2023, + title: "Reflexion: Language Agents with Verbal Reinforcement Learning", + url: "https://arxiv.org/abs/2303.11366", + topics: ["Agent"], + contribution: "用语言反思和 episodic memory 改进后续尝试。", + verified: true, + }, + { + year: 2023, + title: "Gorilla: Large Language Model Connected with Massive APIs", + url: "https://arxiv.org/abs/2305.15334", + topics: ["Agent"], + contribution: "面向大量真实 API 的工具检索与可靠函数调用。", + verified: true, + }, + { + year: 2023, + title: "Voyager: An Open-Ended Embodied Agent with Large Language Models", + url: "https://arxiv.org/abs/2305.16291", + topics: ["Agent"], + contribution: "自动课程、技能库和迭代提示支持开放式长期探索。", + verified: true, + }, + { + year: 2023, + title: "AgentBench: Evaluating LLMs as Agents", + url: "https://arxiv.org/abs/2308.03688", + topics: ["Agent", "评测"], + contribution: "跨操作系统、数据库、游戏等环境统一评估 Agent。", + verified: true, + }, + { + year: 2023, + title: "SWE-bench: Can Language Models Resolve Real-World GitHub Issues?", + url: "https://arxiv.org/abs/2310.06770", + topics: ["Agent", "评测"], + contribution: "用真实仓库 issue 与测试补丁评测软件工程 Agent。", + verified: true, + }, + { + year: 2024, + title: "SWE-agent: Agent-Computer Interfaces Enable Automated Software Engineering", + url: "https://arxiv.org/abs/2405.15793", + topics: ["Agent"], + contribution: "证明专门设计的 Agent-Computer Interface 显著影响解题表现。", + verified: true, + }, + { + year: 2024, + title: "OSWorld: Benchmarking Multimodal Agents for Open-Ended Tasks in Real Computer Environments", + url: "https://arxiv.org/abs/2404.07972", + topics: ["Agent", "多模态", "评测"], + contribution: "在真实桌面操作系统中评测视觉 Computer Use Agent。", + verified: true, + }, + { + year: 2024, + title: "τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains", + url: "https://arxiv.org/abs/2406.12045", + topics: ["Agent", "评测"], + contribution: "以数据库最终状态和策略约束评估真实工具交互。", + verified: true, + }, + { + year: 2025, + title: "BrowseComp: A Simple Yet Challenging Benchmark for Browsing Agents", + url: "https://arxiv.org/abs/2504.12516", + topics: ["Agent", "评测"], + contribution: "要求网页 Agent 多步寻找难以直接检索的事实。", + verified: true, + }, + { + year: 2025, + title: "Kimi K2: Open Agentic Intelligence", + url: "https://arxiv.org/abs/2507.20534", + topics: ["MoE", "Agent", "后训练"], + contribution: "开放 1T MoE Agent 模型,强调工具调用数据合成与 joint RL。", + spotlight: "Kimi", + verified: true, + }, + { + year: 2026, + title: "Kimi K2.5: Visual Agentic Intelligence", + url: "https://arxiv.org/abs/2602.02276", + topics: ["Agent", "多模态", "推理"], + contribution: "把视觉、工具使用和并行 Agent Swarm 纳入统一后训练。", + spotlight: "Kimi", + verified: true, + }, + { + year: 2020, + title: "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale", + url: "https://arxiv.org/abs/2010.11929", + topics: ["多模态"], + contribution: "ViT 把图像 patch 视为 Token 输入 Transformer。", + verified: true, + }, + { + year: 2021, + title: "Learning Transferable Visual Models From Natural Language Supervision", + url: "https://arxiv.org/abs/2103.00020", + topics: ["多模态"], + contribution: "CLIP 以海量图文对比学习建立可迁移视觉语义空间。", + verified: true, + }, + { + year: 2022, + title: "Flamingo: a Visual Language Model for Few-Shot Learning", + url: "https://arxiv.org/abs/2204.14198", + topics: ["多模态"], + contribution: "用 Perceiver Resampler 与 cross-attention 连接冻结视觉/语言模型。", + verified: true, + }, + { + year: 2023, + title: "BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models", + url: "https://arxiv.org/abs/2301.12597", + topics: ["多模态"], + contribution: "用轻量 Q-Former 桥接冻结视觉编码器与 LLM。", + verified: true, + }, + { + year: 2023, + title: "Visual Instruction Tuning", + url: "https://arxiv.org/abs/2304.08485", + topics: ["多模态", "后训练"], + contribution: "LLaVA 用合成视觉指令数据把 CLIP 接入语言模型。", + verified: true, + }, + { + year: 2023, + title: "Sigmoid Loss for Language Image Pre-Training", + url: "https://arxiv.org/abs/2303.15343", + topics: ["多模态"], + contribution: "SigLIP 以成对 sigmoid loss 简化大规模图文对比。", + verified: true, + }, + { + year: 2024, + title: "LLaVA-OneVision: Easy Visual Task Transfer", + url: "https://arxiv.org/abs/2408.03326", + topics: ["多模态"], + contribution: "统一单图、多图与视频的视觉指令迁移。", + verified: true, + }, + { + year: 2025, + title: "Kimi-VL Technical Report", + url: "https://arxiv.org/abs/2504.07491", + topics: ["多模态", "MoE"], + contribution: "MoonViT 原生分辨率视觉编码器与稀疏语言主干。", + spotlight: "Kimi", + verified: true, + }, + { + year: 2020, + title: "Measuring Massive Multitask Language Understanding", + url: "https://arxiv.org/abs/2009.03300", + topics: ["评测"], + contribution: "MMLU 用 57 学科统一衡量广泛知识与解题能力。", + verified: true, + }, + { + year: 2022, + title: "Beyond the Imitation Game: Quantifying and Extrapolating the Capabilities of Language Models", + url: "https://arxiv.org/abs/2206.04615", + topics: ["评测"], + contribution: "BIG-bench 汇集大量任务研究规模与能力边界。", + verified: true, + }, + { + year: 2022, + title: "Holistic Evaluation of Language Models", + url: "https://arxiv.org/abs/2211.09110", + topics: ["评测"], + contribution: "HELM 强调多场景、多指标、透明配置的整体评测。", + verified: true, + }, + { + year: 2023, + title: "LongBench: A Bilingual, Multitask Benchmark for Long Context Understanding", + url: "https://arxiv.org/abs/2308.14508", + topics: ["评测", "长上下文"], + contribution: "跨中英与多任务评估长上下文理解。", + verified: true, + }, + { + year: 2023, + title: "GPQA: A Graduate-Level Google-Proof Q&A Benchmark", + url: "https://arxiv.org/abs/2311.12022", + topics: ["评测", "推理"], + contribution: "由领域专家编写、难以搜索的研究生级科学问答。", + verified: true, + }, + { + year: 2025, + title: "Humanity's Last Exam", + url: "https://arxiv.org/abs/2501.14249", + topics: ["评测", "推理"], + contribution: "覆盖多学科的高难、抗饱和闭答与多模态题集。", + verified: true, + }, + { + year: 2025, + title: "DeepSeek-V3.2: Pushing the Frontier of Open Large Language Models", + url: "https://arxiv.org/abs/2512.02556", + topics: ["长上下文", "推理", "Agent"], + contribution: "DeepSeek Sparse Attention、规模化 RL 与 Agentic 任务合成。", + spotlight: "DeepSeek", + verified: true, + }, + { + year: 2026, + title: "DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence", + url: "https://arxiv.org/abs/2606.19348", + topics: ["长上下文", "MoE", "训练系统", "推理"], + contribution: "CSA/HCA 混合注意力、mHC、Muon 与 1M 上下文双模型。", + spotlight: "DeepSeek", + verified: true, + }, + { + year: 2026, + title: "Kimi K3: Open Frontier Intelligence", + url: "https://arxiv.org/abs/2607.24653", + topics: ["长上下文", "MoE", "训练系统", "低精度", "推理", "Agent", "多模态", "评测"], + contribution: "2.8T-A104B、KDA/MLA、AttnRes、Stable LatentMoE 与 1M Agentic RL。", + spotlight: "Kimi", + verified: true, + }, +]; + +export const paperTopics: PaperTopic[] = [ + "基础", + "Transformer", + "长上下文", + "MoE", + "Scaling", + "训练系统", + "低精度", + "后训练", + "推理", + "Agent", + "多模态", + "评测", +]; diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro new file mode 100644 index 0000000..792b4a5 --- /dev/null +++ b/src/layouts/BaseLayout.astro @@ -0,0 +1,55 @@ +--- +import SiteHeader from "@/components/SiteHeader.astro"; +import SiteFooter from "@/components/SiteFooter.astro"; +import "@/styles/global.css"; + +interface Props { + title: string; + description: string; + section?: string; +} + +const { + title, + description, + section = "", +} = Astro.props; + +const pageTitle = title === "LLM Atlas" ? title : `${title}|LLM Atlas`; +--- + + + + + + + + + + + + + + {pageTitle} + + + + +
+ +
+ + + + diff --git a/src/pages/deepseek/index.astro b/src/pages/deepseek/index.astro new file mode 100644 index 0000000..f9557dd --- /dev/null +++ b/src/pages/deepseek/index.astro @@ -0,0 +1,815 @@ +--- +import BaseLayout from "@/layouts/BaseLayout.astro"; +import DeepSeekLineage from "@/components/DeepSeekLineage.astro"; + +const toc = [ + ["00", "lineage", "先看完整论文谱系"], + ["01", "dense", "LLM:先建立 Dense 基线"], + ["02", "moe", "DeepSeekMoE:专家特化"], + ["03", "mla", "V2:MLA 压缩 KV Cache"], + ["04", "v3", "V3:算法—系统协同"], + ["05", "grpo", "DeepSeekMath:GRPO"], + ["06", "r1", "R1:RL 涌现推理"], + ["07", "v32", "V3.2:稀疏注意力与 Agent"], + ["08", "v4", "V4:百万上下文"], + ["09", "k3", "DeepSeek 怎样流入 K3"], + ["↳", "papers", "精读顺序与来源"], +]; +--- + + +
+
+
+

SPOTLIGHT / DEEPSEEK ALGORITHM × SYSTEM

+

一条少见的、环环相扣的
开放论文主线

+

+ DeepSeek 的价值不只在某个模型分数,而在持续公开“为什么这样设计”: + 容量贵,就做细粒度 MoE;KV Cache 贵,就做 MLA;训练贵,就做 FP8 与通信重叠; + 推理难,就把可验证奖励规模化。 +

+
+
+
SPAN
2024.01 → 2026.06
+
CORE
MoE · MLA · FP8 · GRPO
+
LINE
Dense → Sparse → Reasoning
+
K3 LINK
MLA · MoE · Muon · 1M
+
STATUS
重点专题 · 首版
+
+
+
+ +
+ + +
+
+

00 THE LINEAGE

+

每一代都在偿还上一代最昂贵的账单

+

+ 把 DeepSeek 看成模型名字序列会很乱;把它看成“容量、缓存、训练、推理、长上下文”五张账单, + 技术演进就清楚了。 +

+ +
+ 核心观察 +

+ DeepSeek 的强项是把模型结构和硬件约束写在同一张设计图里。MLA 不只是新 attention, + 它直接针对服务时 KV Cache;FP8 不只是少用几个比特,它要求累加精度、缩放和通信共同配合; + GRPO 不只是 PPO 变体,它直接移除同规模 critic 的显存负担。 +

+
+
+ +
+

01 DEEPSEEK LLM

+

先用 Dense 模型建立基线:规模、数据和双语能力

+

+ 2024 年初的 DeepSeek LLM 发布 7B 与 67B dense 模型, + 在约 2T 中英文 Token 上预训练。它的重要性不在今天看来并不夸张的参数量,而在于建立后续研究的可比基线: + tokenizer、数据配方、训练稳定性、中文评测和 scaling behavior 有了统一起点。 +

+

为什么先做 Dense 很重要

+

+ MoE 同时改变总参数、激活参数、路由、通信和数据分配。没有 dense 基线,很难判断收益来自“更多容量” + 还是来自别的训练差异。DeepSeek LLM 还训练小规模模型拟合 scaling laws, + 再用这些规律选择 67B 的超参数;这条“先小规模试验,再外推大模型”的方法后来在 V3/K3 都持续出现。 +

+
+ 把这一代当作实验坐标系 +

+ DeepSeek LLM 回答的是“如果我们先不引入稀疏专家和低秩缓存,一套扎实的中英 dense Transformer 能到哪里?” + 后面的论文才有明确的对照物。 +

+
+
+ +
+

02 DEEPSEEKMOE

+

专家越大不一定越专:把一个大专家拆成许多细粒度专家

+

+ 传统 MoE 往往把 FFN 分成少数大专家,每个 Token 选 1–2 个。问题是一个大专家仍可能同时处理许多无关知识, + 专家之间也会重复学习公共能力。DeepSeekMoE + 提出两项互补策略。 +

+
+
+ CONVENTIONAL MOE +

少数大专家

+
E1E2E3E4
+

每个专家覆盖面广,公共知识在多个专家中重复;可组合的专业分工有限。

+
+
+ DEEPSEEKMOE +

细粒度 routed + shared

+
Se1e2e3e4e5e6e7
+

shared expert 吸收公共知识;更多小 routed experts 可以按 Token 组合出细分能力。

+
+
+

Fine-Grained Expert Segmentation

+

+ 在保持单 Token 激活计算近似不变时,把专家 FFN 切得更小,同时选择更多个小专家。 + 组合数显著增加:同样的 Token 可以同时调用“代码语法”“Python 库”“矩阵计算”等几个子专长, + 不必把它们硬塞进一个笼统的“代码专家”。 +

+

Shared Expert Isolation

+

+ 某些变换几乎每个 Token 都需要。如果全部交给 routed experts,多个专家会重复学习。 + DeepSeekMoE 把 shared experts 始终激活,承担公共知识;路由专家获得更强动力去形成差异化专长。 + 这套组织直接进入 DeepSeek-V2/V3,也成为 Kimi K3 Stable LatentMoE 的结构祖先。 +

+
+ MoE 的代价从 FLOPs 转移到了通信 +

+ Token 必须被发送到拥有对应专家的设备。专家越细、选择越多,all-to-all、负载波动和权重读取越可能成为瓶颈。 + 因此模型侧路由与系统侧 Expert Parallel 从来不能分开看。 +

+
+
+ +
+

03 DEEPSEEK-V2 / MLA

+

训练只付一次参数成本,KV Cache 却在每个请求、每个 Token 上重复付费

+

+ DeepSeek-V2 是整条谱系的关键转折: + 236B 总参数、21B 激活参数、128K 上下文,把 DeepSeekMoE 用于训练经济性, + 再用 Multi-head Latent Attention(MLA)直接攻击推理服务的内存瓶颈。 +

+
+
−42.5%训练成本
+
−93.3%KV Cache
+
5.76×最大生成吞吐
+

均为 V2 报告相对 DeepSeek 67B 的特定配置结果,不应外推为任意硬件上的固定倍数。

+
+ +

标准 MHA 为什么会让 KV Cache 爆长

+

+ 自回归生成每一步都要查询历史 Token。历史的 K/V 不变,因此缓存起来避免重算。 + 但 MHA 为每层、每个 Token、每个 head 保存 K 和 V;batch、序列和层数一大,缓存会吃掉大量显存, + 直接限制并发和长上下文。 +

+ +
+ cₜᴷⱽ = Wᴰᴷⱽhₜ  kₜᶜ = Wᵁᴷcₜᴷⱽ  vₜᶜ = Wᵁⱽcₜᴷⱽ + + 省略 decoupled RoPE key、各 head 展开与权重吸收细节。核心是 K/V 先联合低秩压缩,缓存 latent 而非完整多头表示。 + +
+

为什么 MLA 比简单 MQA/GQA 更有野心

+

+ MQA 让所有 Query heads 共用一组 K/V,GQA 让一组 Query heads 共用 K/V,缓存更小但容量可能下降。 + MLA 用低秩 latent 保留可恢复的内容子空间,并把 RoPE 相关部分分离,追求接近 MHA 的表达力与更小缓存。 + 它后来被 Kimi K2/K2.5 采用,并在 K3 中作为周期性全局注意力保留。 +

+
+ +
+

04 DEEPSEEK-V3

+

V3 的亮点不是一个技巧,而是四层协同

+

+ DeepSeek-V3 扩到 671B 总参数、37B 激活参数, + 在 14.8T Token 上预训练。报告给出的完整训练用量约 2.788M H800 GPU hours,并称整个训练没有不可恢复的 loss spike 或回滚。 + 这组数字之所以引人注目,是因为它背后同时改动模型、目标、数值和系统。 +

+
+
MODEL

MLA + DeepSeekMoE

沿用 V2 验证过的低缓存 attention 与细粒度专家。

+
ROUTING

Aux-loss-free balance

用动态 expert bias 调整负载,减少辅助平衡损失对主目标的干扰。

+
OBJECTIVE

Multi-Token Prediction

训练时预测多个未来 Token,增加训练信号,并可转化为推测解码草稿能力。

+
SYSTEM

FP8 + DualPipe

低精度训练、计算通信重叠、跨节点专家并行共同压低成本。

+
+ +

无辅助损失负载均衡

+

+ MoE 必须避免少数专家过载。传统做法加入 load-balancing auxiliary loss, + 但它与语言建模主目标可能冲突:为了均匀而把 Token 送给次优专家。V3 为每个专家维护 bias, + 根据近期负载上调冷门专家、下调热门专家;bias 只影响路由选择,不直接进入最终门控权重, + 从而把“系统要均衡”和“模型要准确”更松地解耦。 +

+ +

FP8 训练真正难在哪

+

+ FP8 动态范围和有效精度有限,不能简单把所有 tensor 强转为 8 位。V3 使用细粒度量化、较高精度累加、 + 在线缩放和特定敏感模块的高精度保留;同时让低精度通信减少跨卡带宽。 + 论文最值得看的不是“首次大规模 FP8”宣传,而是哪些路径降精度、哪些路径绝不降,以及误差怎样被控制。 +

+ +

DualPipe:流水线的空泡是一笔真金白银

+

+ Pipeline Parallel 把层切到不同 stage;朴素调度会让设备在前向/反向依赖之间等待。 + DualPipe 从流水线两端同时喂入 micro-batch,并重叠前向、反向与专家通信,尽量把空泡藏在计算后面。 + 它与 DeepEP 的高吞吐/低延迟 all-to-all 一起,把 MoE 理论稀疏性变成真实集群效率。 +

+
+ +
+

05 DEEPSEEKMATH / GRPO

+

GRPO:不用再养一个和策略模型同样昂贵的 Critic

+

+ DeepSeekMath 不只是数学模型论文。 + 它在 7B 模型和 120B 数学相关 Token 上验证数据工程,同时提出 Group Relative Policy Optimization, + 为后来 DeepSeek-V2 对齐和 R1 大规模推理 RL 铺路。 +

+

PPO 的显存账单

+

+ 经典 RLHF/PPO 常同时保留 policy、reference、reward model 和 value/critic model。 + 对大模型而言,critic 往往与 policy 同量级。GRPO 对同一道题采样一组答案, + 用组内奖励的均值和标准差构造相对优势,省去单独 value model。 +

+
+
PROMPT证明 / 求解一道题
+ sample group +
+
y₁reward 0
+
y₂reward 1
+
y₃reward 0.7
+
y₄reward 0.2
+
+ normalize +
RELATIVE ADVANTAGE高于组均值的轨迹被鼓励
+
+
+ Âᵢ = (rᵢ − mean(r₁…rᴳ)) / (std(r₁…rᴳ) + ε) + GRPO 完整目标仍包含 clipped policy ratio 与 KL 约束;这里只展示“组相对优势”这一核心直觉。 +
+

组相对不是免费午餐

+

+ 一道题要采样多条答案,rollout 成本仍然很高;奖励若不可验证或存在偏差,组内比较也会放大奖励漏洞。 + 当一组奖励全相同,归一优势几乎不给学习信号。R1 的成功因此同时依赖可验证数学/代码奖励、足够多样的采样和大规模基础设施。 +

+
+ +
+

06 DEEPSEEK-R1

+

R1-Zero 最重要的实验:先不教推理格式,只给可验证结果奖励

+

+ DeepSeek-R1 的历史意义, + 是把“推理可以通过大规模 RL 从强 base model 中被激发”做成公开、可研究的系统证据。 +

+

R1-Zero 做了什么

+

+ 从 DeepSeek-V3 Base 出发,不先做推理 SFT,直接以 GRPO 进行大规模 RL。 + 奖励以答案正确性为主,并加入格式奖励。训练中出现更长推理、反思、回溯和自我验证等行为; + 论文把某些突然延长思考的轨迹称为 “aha moment”。 +

+

它也明确暴露了纯 RL 的问题

+

+ R1-Zero 会重复、可读性差、混合语言。奖励只关心最终正确时,模型没有充分动力照顾人类阅读体验。 + 正式 R1 因而先加入少量高质量 cold-start CoT 数据,再做 reasoning-oriented RL; + 随后用 rejection sampling 产生 SFT 数据,混入写作、事实问答等非推理任务,再进行第二阶段 RL 兼顾帮助性与安全。 +

+
+
BASEDeepSeek-V3 Base强预训练基础
+ +
COLD START少量可读 CoT稳定格式与语言
+ +
REASONING RL可验证奖励 + GRPO强化求解策略
+ +
SFT MIX拒绝采样 + 通用数据恢复广泛任务
+ +
FINAL RL帮助性与安全统一模型
+
+

Distillation 的关键发现

+

+ 团队用 R1 生成的推理样本微调 Qwen/Llama dense 模型,发布 1.5B–70B 蒸馏版本。 + 这说明小模型不一定要自己承担完整的探索式 RL 成本,可以模仿强 reasoning teacher 的轨迹; + 但蒸馏得到的是 teacher 数据分布上的能力,不等于小模型内部复现了同样的 RL 发现过程。 +

+
+ CoT 变长不等于推理一定更好 +

+ 长轨迹可能包含有效搜索,也可能是重复与绕路。R1 证明的是在可验证任务和适当训练下, + 增加推理计算可以转化为能力;不是“输出越长越聪明”。 +

+
+
+ +
+

07 DEEPSEEK-V3.2

+

从会推理到会在长上下文里使用工具

+

+ DeepSeek-V3.2 把三条线合并: + DeepSeek Sparse Attention(DSA)降低长上下文成本,更大规模的 RL 提升 reasoning, + Agentic task synthesis 则把 reasoning 放进工具交互轨迹。 +

+

DSA 的两阶段直觉

+

+ 完整注意力让每个 Query 和全部历史交互。DSA 先用轻量、可学习的 indexer 给历史 Token 评分, + 选出小部分候选,再让主 attention 只在候选上做高容量计算。 + 关键不只是 top-k,而是 indexer 也在训练中学习“什么值得看”;这比固定窗口更能适应内容相关的远距离依赖。 +

+
+
+ {Array.from({ length: 18 }, (_, index) => {index + 1})} +
+ learned indexer → top-k +
2671317
+ main attention + Query +
+

+ Agent 方面,V3.2 的任务合成管线系统地产生复杂、交互式工具任务,让思考与 tool use 交织。 + 这与 K3 的 white-box harness、知识图谱任务合成和可验证环境形成同期对照:前沿模型竞争正在从静态题库转向训练环境。 +

+
+ +
+

08 DEEPSEEK-V4

+

百万上下文从“支持”变成一套专门架构

+

+ 2026 年的 DeepSeek-V4 preview 包含 + 1.6T-A49B 的 Pro 与 284B-A13B 的 Flash,均支持 1M Token。 + 它使用 Compressed Sparse Attention(CSA)与 Heavily Compressed Attention(HCA)的混合注意力, + Manifold-Constrained Hyper-Connections(mHC)改善深度残差,并采用 Muon 优化器。 +

+
+
1.6T / 49BV4-Pro total / active
+
284B / 13BV4-Flash total / active
+
>32T预训练 Token
+

V4 官方报告摘要数据;模型是 preview 版本,后续版本需按研究截止日重新核验。

+
+

+ 报告称在 1M 上下文下,V4-Pro 的单 Token 推理 FLOPs 是 V3.2 的 27%,KV Cache 是 10%。 + 这说明长上下文竞争已从单一位置外推转向混合注意力、压缩缓存、残差、优化器和后训练的系统协同。 + 它也解释 K3 报告为何把 V4 列为同代开放基础模型对照。 +

+
+ V4 与 K3 不是同一条注意力路线 +

+ V4 用 CSA/HCA 混合压缩与稀疏注意力;K3 用 3:1 KDA/Gated MLA 混合线性递归与全局注意力。 + 两者目标相近——降低百万上下文成本并保留能力——但状态表示、检索方式和系统内核不同。 +

+
+
+ +
+

09 INTO KIMI K3

+

DeepSeek 的哪些思想直接流入 K3,哪些只是同期呼应

+
+
DeepSeek 线索K3 中的落点关系
+
DeepSeekMoE shared + routed expertsStable LatentMoE 保留 shared/routed 组织直接结构祖先
+
V2 Multi-head Latent Attention每四层一次 Gated MLA,全局注意力明确采用并改造
+
V3 Auxiliary-loss-free balancingQuantile Balancing 应对近千专家同一问题的新方案
+
V3 FP8 / 低精度协同专家 MXFP4 权重、MXFP8 激活与 QAT更低精度的延伸
+
DeepSeekMath / R1 的 GRPO 与 RL多 domain、多 effort RL + MOPD共享测试时扩展范式
+
V4 Muon 与深度残差创新Per-Head Muon + Attention Residuals同期不同设计
+
V3.2/V4 长上下文KDA + Gated MLA + KDA system co-design同目标、不同路线
+
+

+ 这正是为什么 DeepSeek 值得在 LLM Atlas 中作为贯穿案例:它不是 K3 的“对手名单”之一, + 而是 K3 架构里多条思想的公开祖先与同代参照。读懂 V2 的 MLA 和 DeepSeekMoE, + K3 的一半架构会突然变得熟悉。 +

+
+ +
+

READING ORDER

+

建议精读顺序:不要直接从 R1 开始

+ + +
+
+
+ + +
diff --git a/src/pages/foundations/index.astro b/src/pages/foundations/index.astro new file mode 100644 index 0000000..cfd95bf --- /dev/null +++ b/src/pages/foundations/index.astro @@ -0,0 +1,583 @@ +--- +import BaseLayout from "@/layouts/BaseLayout.astro"; +import AttentionLab from "@/components/AttentionLab.astro"; + +const toc = [ + ["00", "goal", "这一章要建立什么"], + ["01", "next-token", "预测下一个 Token"], + ["02", "vector", "词怎样变成向量"], + ["03", "bottleneck", "RNN 的顺序瓶颈"], + ["04", "attention", "注意力的出现"], + ["05", "qkv", "Q / K / V"], + ["06", "block", "Transformer Block"], + ["07", "training", "训练与生成"], + ["08", "myths", "常见误解"], + ["↳", "papers", "关键论文链"], +]; +--- + + +
+
+
+

FOUNDATIONS / 02 TRANSFORMER

+

注意力,不是让模型
“更专心”那么简单

+

+ 它把序列建模从“一步一步传话”改成“每个位置直接检索相关位置”。 + 这一变化解决了长距离依赖,也把训练变成高度并行的矩阵计算。 +

+
+
+
LEVEL
L0 直觉 → L2 公式
+
PREREQ
只需基础概率概念
+
CORE
Q · K · V · Softmax
+
TIME
约 55 分钟
+
STATUS
首版可读 · 继续补图
+
+
+
+ +
+ + +
+
+

00 MENTAL MODEL

+

读完以后,你应该能画出一个 Token 的完整旅程

+

+ 文本先被切成 Token,Token 变成向量;自注意力让每个位置从其他位置收集信息, + 前馈网络在每个位置内部加工;残差和归一化让几十上百层能够稳定堆叠。 +

+ +

+ K3 的复杂架构仍然没有离开这张图:KDA 与 MLA 替换“位置之间交流”的具体机制, + Stable LatentMoE 替换 FFN,Attention Residuals 改变层与层之间的传递,MoonViT 把图像也转成可进入主干的表示。 +

+
+ +
+

01 LANGUAGE MODELING

+

大模型最底层的训练题:根据前文猜下一个 Token

+

+ 一段文本的联合概率可以用链式法则拆开: + 第一个 Token 的概率 × 在第一个已知时第二个的概率 × 在前两个已知时第三个的概率……。 + 语言模型只要不断学会这些条件概率,就能给整段文本分配概率。 +

+
+ P(x₁, x₂, …, xₙ) = ∏ₜ P(xₜ | x₁, …, xₜ₋₁) + 这只是概率链式法则,本身不规定用 N-gram、RNN 还是 Transformer 计算条件概率。 +
+

+ 训练时,我们已知句子后面的正确 Token,因此可以把一段文本整体右移一位做标签,所有位置并行产生损失。 + 模型对正确 Token 给出的概率越低,负对数损失越大。 +

+
+ L = − Σₜ log Pθ(xₜ | x<ₜ) + 交叉熵训练不会直接写入“事实库”或“推理规则”;这些结构是模型为降低大量预测误差而在参数中形成的。 +
+

为什么这样简单的任务会学到很多东西

+

+ 要准确补全“牛顿在 1687 年出版了……”,模型需要吸收事实;要补全一段代码,需要跟踪变量和语法; + 要补全论证,需要建模前提与结论。下一个 Token 预测没有显式要求“理解”,但数据中的各种规律都会降低预测损失。 + 模型容量和数据足够大时,许多规律共享同一套内部表示,因此出现广泛迁移。 +

+
+ 但不要反过度解释 +

+ 预测目标能诱导知识与能力,不保证事实永远准确、推理过程忠实或目标与人类一致。 + 这正是检索、后训练、验证器和安全对齐仍然必要的原因。 +

+
+
+ +
+

02 DISTRIBUTED REPRESENTATION

+

Token ID 没有意义;Embedding 才是模型能计算的语义坐标

+

+ Tokenizer 把文本分成词、子词或字节片段,并映射为整数 ID。ID 只是目录编号: + 42 比 17 大,不代表第 42 个 Token 语义更强。Embedding table 根据 ID 查出一个可训练向量, + 后续网络只处理这些连续数值。 +

+
+
TOKEN小猫ID = 4821
+ lookup +
EMBEDDING[0.18, −0.42, 0.07, …, 0.31]d 个可学习维度
+
+

+ “分布式表示”的要点是:一个概念不放在单个神经元里,而分散在许多维度; + 一个维度也参与表示许多概念。相似用法的 Token 在训练中往往形成相近或具有稳定关系的向量。 + Bengio 2003 的神经概率语言模型和 2013 年 Word2Vec,是这条历史线的关键节点。 +

+

同一个词在不同句子里怎么办

+

+ 初始 embedding 对同一个 Token 固定不变,但经过 self-attention 后会变成 contextual representation。 + “苹果发布手机”和“吃一个苹果”里的“苹果”起点相同,周围 Token 通过注意力写入不同上下文后,深层表示会分开。 +

+
+ +
+

03 SEQUENTIAL BOTTLENECK

+

Transformer 之前:信息像传话游戏一样逐步穿过 RNN

+

+ RNN 每读一个 Token,就把旧隐藏状态和新输入合成新状态。理论上最后状态可以包含全部历史; + 实际上,遥远信息必须经过许多次变换,梯度也必须沿时间反向穿过这些步骤。 + LSTM/GRU 用门控缓解遗忘与梯度问题,但训练仍然按时间顺序,难以把序列位置全部摊到 GPU 上并行。 +

+
+
+ RNN / 顺序传递 +
x₁h₁h₂h₃h₄
+

x₁ 的信息要到 h₄,必须走过每一个中间状态。

+
+
+ SELF-ATTENTION / 直接检索 +
x₁x₂x₃x₄↘ ↓ ↙x₄′
+

x₄ 可以在一层内直接读取 x₁、x₂、x₃。

+
+
+

+ 2014 年 Seq2Seq 用 encoder 把源句压进固定向量,再由 decoder 生成目标句。长句表现受限时, + Bahdanau Attention 让 decoder 每一步不再只依赖最后一个 encoder state,而能对全部 encoder states 加权读取。 + 注意力最初是一座跨 encoder—decoder 的桥;Transformer 的突破是让桥本身成为主体。 +

+
+ +
+

04 ATTENTION

+

注意力本质上是一次可学习的“软检索”

+

+ 每个位置提出一个 Query;所有位置提供 Key 和 Value。Query 与 Key 的匹配度决定从相应 Value 读取多少信息。 + 因为权重是连续概率,而不是只选择一个位置,所以称为“软”检索。 +

+ +

为什么相似度之后要除以 √dₖ

+

+ 若 Q、K 的每个分量方差相近,维度越高,点积的典型幅值越大。softmax 输入过大时会接近 one-hot, + 梯度变得很小。除以 √dₖ 把数值尺度拉回较稳定范围,这就是 Scaled Dot-Product Attention 的“scaled”。 +

+
+ Attention(Q, K, V) = softmax(QKᵀ / √dₖ) · V + 先得到每个 Query 对所有 Key 的相似度,经 softmax 变成和为 1 的权重,再对 Value 做加权和。 +
+
+ +
+

05 QUERY · KEY · VALUE

+

Q、K、V 不是三份词义,而是三个可学习角色

+

+ 同一个输入向量 x 乘三个不同矩阵,得到 Q、K、V。模型可以让“用于匹配的特征”和“匹配后真正搬运的内容”分开。 + 例如代词位置的 Query 可以强调性别/单复数线索,名词位置的 Key 暴露这些线索, + Value 则携带更丰富的实体表示。 +

+
+
Q / QUERY

我在找什么?

当前位置为了更新自己,需要哪类上下文信号。

+
K / KEY

我能被怎样找到?

每个来源位置公开哪些匹配特征。

+
V / VALUE

找到后带走什么?

一旦获得权重,真正汇入目标位置的信息内容。

+
+

Multi-Head 的意义

+

+ 单个注意力分布必须把多种关系挤在一起。Multi-Head 将表示投影到多个较小子空间: + 不同 head 可以学习局部搭配、指代、结构边界、长距离依赖等不同模式,最后拼接并线性投影。 + “某个头一定是语法头”并没有保证;head 的功能是训练中形成的,常常混合且可替代。 +

+

Causal Mask 为什么不可少

+

+ 训练 decoder-only 模型时,位置 t 的输入序列里同时存在后续 Token。若不遮住未来位置, + 模型会直接偷看答案。Causal mask 把 QKᵀ 右上三角设为负无穷, + softmax 后未来权重变成 0;这样所有位置仍可并行训练,却遵守生成时只能看过去的约束。 +

+
+ +
+

06 TRANSFORMER BLOCK

+

Attention 只负责交流;FFN 才负责每个位置内部加工

+

+ 一个现代 decoder block 通常由两类子层组成:Attention 在位置之间混合信息; + FFN 对每个位置独立应用相同的非线性变换。残差让子层学习“在现有表示上改多少”, + Normalization 则控制数值尺度。 +

+ +

Pre-Norm 与 Post-Norm

+

+ 原始 Transformer 在残差相加后做 LayerNorm(Post-Norm)。更深模型常把 Norm 放到子层之前(Pre-Norm), + 让主残差路径更接近恒等映射,梯度传播更稳定。许多现代模型使用 RMSNorm,省去均值中心化, + 并用 SwiGLU 替代简单 ReLU FFN。K3 进一步把 FFN 替换为 Stable LatentMoE,并用 AttnRes 重做跨深度信息流。 +

+
+ +
+

07 TRAINING & GENERATION

+

训练能并行看完整答案;生成却必须一次走一步

+
+
+ TRAINING / TEACHER FORCING +

一段文本同时产生许多训练题

+

输入“今 天 天 气”,标签右移为“天 天 气 好”。因果 mask 阻止偷看,四个位置可并行算损失。

+
+
+ INFERENCE / AUTOREGRESSIVE +

新 Token 不存在,必须逐个生成

+

先产生第一个,再把它放回输入产生第二个。KV Cache 避免每一步重算全部旧 Token 的 K/V。

+
+
+

+ 这个差异解释了为什么训练吞吐和线上生成速度是两套系统问题,也解释了 K3 为什么同时关心 + KDA state、MLA KV Cache、推测解码 draft model 和 fleet scheduling。 +

+

Logits 怎样变成一个 Token

+

+ 最后一层表示经 LM head 投影到词表大小,得到每个 Token 的 logits。temperature 调整分布尖锐程度, + top-p/top-k 截断候选,再采样或取最大值。它们改变选择策略,不会给模型增加知识,也不能修复错误推理。 +

+
+ +
+

08 COMMON MISCONCEPTIONS

+

六个最容易带进后续论文的误解

+
+
误解 01

Attention 权重就是模型解释

权重只描述某层某头的 value 混合比例;它不必等价于最终预测的因果解释。

+
误解 02

上下文越长就记得越好

窗口是容量上限;检索、位置偏差、干扰和训练分布决定模型是否会用。

+
误解 03

参数越多,每次计算一定越贵

Dense 模型大致如此;MoE 可让总参数远大于激活参数,但引入路由和通信成本。

+
误解 04

Tokenizer 只影响输入长度

它还决定模型看到的基本单位,影响跨语言效率、数字/代码规律与词表输出。

+
误解 05

模型在数据库里查答案

预训练知识分布在参数计算中;显式检索需要外接索引、工具或上下文。

+
误解 06

CoT 是模型真实内心记录

生成的推理文本可用于求解和检查,但不保证完整、忠实地暴露内部因果过程。

+
+
+ +
+

LANDMARK PAPERS

+

从问题到 Transformer 的关键论文链

+ + +
+
+
+ + +
diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 0000000..726eab9 --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,298 @@ +--- +import BaseLayout from "@/layouts/BaseLayout.astro"; +import ArchitectureExplorer from "@/components/ArchitectureExplorer.astro"; +import DeepSeekLineage from "@/components/DeepSeekLineage.astro"; +import { chapters, statusLabel } from "@/data/chapters"; + +const routes: Record = { + roadmap: "/roadmap/", + foundations: "/foundations/", +}; + +const paths = [ + { + id: "beginner", + number: "01", + label: "零基础", + title: "从“下一个词”开始,不先背 Transformer 公式", + text: "先建立 Token、概率、向量和训练目标的直觉,再通过可操作的注意力实验进入架构。", + steps: ["01 语言模型从哪里来", "02 注意力与 Transformer", "03 表示、位置与残差", "04 Scaling Laws"], + time: "8–12 小时", + target: "能独立阅读主流 LLM 架构图", + }, + { + id: "k3", + number: "02", + label: "K3 反向拆解", + title: "先看全貌,再沿组件回到每条技术祖先", + text: "适合已经用过大模型、想迅速读懂 K3 报告的人。每个组件都能跳回其历史专题。", + steps: ["K3 三维信息流", "KDA 与 MLA", "Stable LatentMoE", "1M Agentic RL 与系统"], + time: "6–10 小时", + target: "能逐节解释 K3 技术报告", + }, + { + id: "deepseek", + number: "03", + label: "DeepSeek 主线", + title: "沿一家公司,看算法—系统协同如何一步步形成", + text: "从 DeepSeek LLM 的 dense 基线,到 MoE、MLA、FP8、GRPO、R1、稀疏注意力与百万上下文。", + steps: ["DeepSeekMoE", "V2 / MLA", "V3 / FP8 / DualPipe", "Math / GRPO / R1", "V3.2 / V4"], + time: "7–11 小时", + target: "理解 DeepSeek 论文间的因果关系", + }, + { + id: "systems", + number: "04", + label: "系统工程", + title: "跟着一个 Token 穿过 GPU、网络、缓存与服务集群", + text: "适合工程背景读者,从计算与内存账本出发理解并行、低精度、通信和推理服务。", + steps: ["08 大规模训练", "09 数值与优化", "14 推理服务", "K3 §5 Infrastructure"], + time: "10–16 小时", + target: "看懂大模型系统报告与性能数字", + }, +]; +--- + + +
+
+
+

OPEN COURSE / 2026 LARGE LANGUAGE MODELS

+

+ 大模型技术全景 + 从“预测下一个词”到 Kimi K3 的 2.8T 开放前沿 +

+

+ 这是一套按问题脉络组织的中文开放课程。我们从最小直觉出发,追踪每篇关键论文究竟解决了什么, + 再把注意力、MoE、规模化训练、多模态、推理强化学习与 Agent 系统重新汇入 Kimi K3。 +

+ +
+ +
+
+ 研究范围 +

表示学习 · Transformer · Scaling · MoE · 长上下文 · 训练系统 · 后训练 · 推理 · Agent · 多模态 · 服务与评测

+ 查看实时进度 → +
+
+ +
+
+
+

00 WHY THIS ATLAS

+

不是论文清单,而是一条能走通的理解路径

+
+

+ 大模型知识最难的地方不是资料少,而是资料之间的桥断了:初学解释省略公式,论文省略历史, + 系统报告又默认你已经理解模型。LLM Atlas 专门补这些桥。 +

+
+ +
+ 课程主张 +

+ 真正理解一项技术,需要同时回答:它解决什么瓶颈、核心机制如何工作、证据是否支持、 + 工程代价是什么,以及下一篇论文为什么自然会出现。 +

+
+ +
+
+ 01 / PROBLEM +

从问题开始

+

先看到旧方法撞上的墙,再引入新名词。KDA、MLA、MoE 都不再是凭空掉下来的缩写。

+
+
+ 02 / LAYERS +

四层解释

+

同一概念同时提供直觉、机制、论文和工程四层入口,允许读者在适合自己的深度停留。

+
+
+ 03 / VISUAL +

图必须能帮助推理

+

优先重绘可缩放、可交互的架构图;每种颜色固定含义,简化之处明确标出。

+
+
+ 04 / EVIDENCE +

事实、解释、推断分开

+

关键结论回到论文和官方实现。榜单写明 harness、工具预算与截止日期,未知就明确说未知。

+
+
+
+ +
+
+
+

01 LEARNING PATHS

+

你不必从第一页顺序读到最后

+
+

四条路径共享同一张知识图。点击路径切换,章节之间的先修关系始终可追踪。

+
+ +
+
+ {paths.map((path, index) => ( + + ))} +
+
+ {paths.map((path, index) => ( +
+
+ {path.label} +

{path.title}

+

{path.text}

+
    + {path.steps.map((step) =>
  1. {step}
  2. )} +
+
+ +
+ ))} +
+
+
+ +
+
+
+

02 CURRICULUM MAP

+

16 个专题,拼成一张完整技术地图

+
+

+ 进度条表示内容成熟度,不代表相关领域的重要性。首版先打通全站骨架,再逐章扩写到论文与工程层。 +

+
+ +
+ {chapters.map((chapter) => { + const href = routes[chapter.slug] ?? `/roadmap/#chapter-${chapter.number}`; + return ( + +
+ {chapter.number} + {statusLabel[chapter.status]} +
+

{chapter.title}

+

{chapter.question}

+
+
+ +
+
+ {chapter.papers} 篇核心论文 + {chapter.progress}% +
+
+
+ ); + })} +
+
+ +
+
+
+

03 KIMI K3 AS THE CONFLUENCE

+

K3 把三种信息流和一套庞大系统放进同一模型

+
+

+ K3 报告最好的阅读钥匙,是把架构看成 token、depth、channel 三个方向的信息流; + 视觉输入与训练/服务基础设施则包住这三条轴。 +

+
+ + 进入完整 K3 技术报告导读 → +
+ +
+
+
+

04 DEEPSEEK SPOTLIGHT

+

DeepSeek:一条极适合学习“算法—系统协同”的论文主线

+
+

+ 从细粒度 MoE、MLA 和 FP8,到 GRPO 与 R1,DeepSeek 的每篇报告都在解决上一代留下的明确约束。 + 这里会给予它比普通模型谱系更细的篇幅。 +

+
+ + 阅读 DeepSeek 专题 → +
+ +
+
+
+

05 OPEN RESEARCH

+

课程本身也是一项开放研究工程

+
+

+ 网站源码、路线、进度和研究规范全部公开。Grok 用来扩展检索线索,最终结论由一手论文和官方实现核验。 +

+
+
+
+ P0 +

一手论文

+

arXiv、会议、期刊与作者正式技术报告,承载核心机制和实验数字。

+
+
+ P1 +

官方实现

+

仓库、模型卡、训练与评测代码,用于确认论文描述如何落到真实系统。

+
+
+ P2 +

官方说明

+

实验室博客、系统卡和产品文档;尚无论文的新模型会临时使用并标明状态。

+
+
+ P3+ +

独立复现

+

第三方结果用于检验外部有效性;二手文章只发现线索,不承载关键事实。

+
+
+
+ + +
diff --git a/src/pages/k3/index.astro b/src/pages/k3/index.astro new file mode 100644 index 0000000..c2cb861 --- /dev/null +++ b/src/pages/k3/index.astro @@ -0,0 +1,710 @@ +--- +import BaseLayout from "@/layouts/BaseLayout.astro"; +import ArchitectureExplorer from "@/components/ArchitectureExplorer.astro"; + +const toc = [ + ["00", "orientation", "先建立阅读坐标"], + ["01", "architecture", "一张图看完整架构"], + ["02", "kda", "KDA:线性工作记忆"], + ["03", "mla", "Gated MLA:全局回看"], + ["04", "attnres", "Attention Residuals"], + ["05", "moe", "Stable LatentMoE"], + ["06", "vision", "原生视觉与优化器"], + ["07", "pretrain", "预训练与长上下文"], + ["08", "posttrain", "后训练与推理强度"], + ["09", "agents", "Agentic RL 环境"], + ["10", "infra", "2.8T / 1M 基础设施"], + ["11", "evaluation", "评测与局限"], + ["↳", "sources", "论文链与一手来源"], +]; +--- + + +
+
+
+

ANCHOR REPORT / 01 KIMI K3

+

把 47 页 K3 报告
读成一条因果链

+

+ 不从 2.8 万亿这个最大数字开始,而从模型同时面对的四个瓶颈开始: + 序列太长、网络太深、容量太大、Agent 轨迹太久。K3 的每个新组件都可以放回这四个问题。 +

+
+
+
REPORT
47 页 · 151 条参考来源
+
MODEL
2.8T total / 104B active
+
CONTEXT
1,048,576 tokens
+
ARCH
69 KDA + 24 Gated MLA
+
STATUS
首版导读 · 持续扩写
+
+
+
+ +
+ + +
+
+

00 READING ORIENTATION

+

先别急着记缩写:K3 在扩展三种信息流

+

+ K3 报告自己的组织方式非常漂亮:沿序列长度、网络深度和模型宽度扩展信息流。 + 这比“又加了哪些模块”更接近真正的设计逻辑。 +

+
+
+ SEQUENCE / TOKEN +

一句话内部怎样交流

+

KDA 负责低成本持续记忆,周期性的 Gated MLA 负责完整全局交互。

+
+
+ DEPTH / LAYER +

信息怎样穿过 93 层

+

Attention Residuals 让当前层有选择地读取早期层,而不只是接收统一累加结果。

+
+
+ WIDTH / EXPERT +

容量怎样远大于计算量

+

Stable LatentMoE 建立 896 个路由专家,每个 Token 只激活 16 个。

+
+
+

+ 第四个问题藏在模型外部:这些结构要在真实硬件上完成预训练、百万 Token 强化学习和线上服务。 + 所以报告第 5 章不是附录,而是 K3 设计的一半。没有 FlashKDA、专家并行、外置 KV Cache、 + 可恢复沙箱和集群调度,前面的架构只是一张昂贵的蓝图。 +

+
+ 一句话版本 +

+ K3 想让信息在“很长的时间、很深的网络、很宽的专家库”里都能流动,同时让整个系统仍然能被训练和部署。 +

+
+
+ +
+

01 ARCHITECTURE OVERVIEW

+

一张图看完 K3:先看流向,再看数字

+ + +

关键规格应该怎样读

+
+
总参数2.8T

表示模型装下的总容量,不等于每个 Token 都计算全部参数。

+
激活参数104B

单个 Token 前向时实际经过的参数规模,仍然非常大。

+
层数93

其中 1 层 dense;注意力由 69 KDA 与 24 Gated MLA 组成。

+
隐藏维度7168

主干表示宽度;LatentMoE 内部路由空间压到 3584。

+
专家896 → 16

另有 2 个 shared experts,给通用变换保留稳定路径。

+
上下文1,048,576

约一百万 Token;能放下不等于不需要上下文管理。

+
视觉编码器401M

MoonViT-V2 把图像和视频编码到共享表示空间。

+
部署精度MXFP4 / 8

专家权重 MXFP4、专家激活 MXFP8,非专家模块保留更高精度。

+
+
+ 常见误解:2.8T 不是“每次都算 2.8T” +

+ MoE 的核心正是把参数容量和每 Token 计算拆开。2.8T 描述可用参数总量;104B 才更接近一次前向的激活规模。 + 但 104B 依然远高于许多 dense 模型,所以“稀疏”不等于“能在普通显卡轻松运行”。 +

+
+
+ +
+

02 KIMI DELTA ATTENTION

+

KDA:不保存所有配对,而是维护一份会更新的工作记忆

+

+ 标准注意力会让每个新 Token 和许多旧 Token 直接比较。KDA 改成维护一个固定形状的状态: + 新信息到来时,先有选择地遗忘,再用“纠错式写入”更新这份状态。 +

+ +

从标准注意力的账单说起

+

+ 长度为 n 的序列,如果做完整 self-attention,需要形成近似 n × n 的交互。 + 在一百万 Token 处,哪怕使用 FlashAttention 避免把整张矩阵写回显存,计算量仍按平方增长。 + 线性注意力的基本想法是先把历史压进状态 S,读取时只让 Query 查询状态。 +

+ +
+ Sₜ = (I − βₜkₜkₜᵀ) · Diag(αₜ) · Sₜ₋₁ + βₜkₜvₜᵀ
+ õₜ = Sₜᵀqₜ + + 教学化书写,符号对应 K3 Report Eq. 1。α 控制各通道保留多少旧状态;β 控制本次写入强度; + delta rule 先擦除当前 key 已有的预测,再写入新的 value。 + +
+ +

为什么叫 Delta Rule

+

+ 如果直接做 S ← S + kvᵀ,同一个 key 反复出现会不断累加,状态容易被重复信息污染。 + Delta Rule 先问“现有状态对这个 key 已经会输出什么”,只写入真实 value 与旧预测之间的差值。 + 它像修改文档:不是每次把整篇内容追加到末尾,而是找到对应位置做差量更新。 +

+ +

K3 相比 Kimi Linear 改了什么

+
    +
  1. + 逐通道遗忘门。α 不是一个标量,而是 key channel 级别的保留率;不同维度可以拥有不同记忆时长。 +
  2. +
  3. + 把 log-decay 下界固定为 −5。Kimi Linear 的衰减映射下界无穷,会让 chunk 内累计衰减的倒数爆大; + K3 将其限制在可由 BF16 表示的范围,从而让对角 tile 也能直接使用 Tensor Core 的稠密矩阵乘。 +
  4. +
  5. + 全秩、输入相关的输出门。读取状态后,模型可以对每个输入动态决定哪些输出通道放行。 +
  6. +
  7. + 块内并行、块间递归。序列分成 chunk:chunk 之间传状态,chunk 内改写成并行矩阵计算,兼顾训练吞吐与线性推理。 +
  8. +
+ +
+ 论文证据怎样看 +

+ K3 报告把整体约 2.5× scaling efficiency 改善归因于 KDA、AttnRes、Stable LatentMoE 与训练/数据配方的组合, + 不能把 2.5× 单独归到 KDA。KDA 的独立机制与消融需要同时阅读 + Kimi Linear 和 K3 §2.1。 +

+
+
+ +
+

03 GATED MLA

+

周期性 MLA:工作记忆之外,仍要把全局摊开来看

+

+ 纯递归状态的优势是成本低,弱点是历史被压进固定大小状态后,精确回看某个遥远 Token 会更难。 + K3 没有把完整注意力全部删除,而是采用 3 层 KDA + 1 层 Gated MLA 的混合模式, + 并保证主干最后一层也是 Gated MLA。 +

+ +

MLA 在压缩什么

+

+ Multi-head Latent Attention 由 DeepSeek-V2 引入。 + 标准多头注意力会为每个历史 Token 缓存多头的 K 和 V;MLA 先把它们压到低维 latent cₜ, + 服务时缓存 cₜ,计算注意力时再通过投影恢复各头所需内容。它保留全局 token-to-token 交互, + 同时显著缩小 KV Cache。 +

+ +
+ cₜ = Wᶜxₜ → 缓存 cₜ → 按需上投影为各头的 K / V + 这是结构直觉,不是 MLA 完整公式。旋转位置编码的解耦与吸收技巧会在“长上下文”专题单独推导。 +
+ +

为什么 K3 的 MLA 不再使用位置编码

+

+ K3 在全部 MLA 层采用 NoPE:Query 和 Key 不显式加入位置编码。位置与近因信息主要由穿插的 KDA 提供, + MLA 专注于全局内容匹配。这样扩展上下文时,也不必重新调 RoPE base 或应用 YaRN。 + 这是混合架构的一个重要分工:KDA 提供位置敏感的持续混合,MLA 提供不受限的全局内容交互。 +

+

+ K3 还给 MLA 加入与 KDA 对齐的输入相关全秩输出门,并在训练时将 attention output 保持为 FP32, + 以纠正 FlashAttention 中有偏的舍入误差;代价是更大的片上存储,报告为此重新安排了 kernel 中的 tile 缓冲重叠。 +

+
+ +
+

04 ATTENTION RESIDUALS

+

把注意力从“时间方向”旋转到“深度方向”

+

+ Transformer 用注意力解决了 RNN 必须把全部历史压进一个时间状态的问题。 + K3 提问:普通 residual 是否又把所有早期层压进了一个深度状态? +

+

+ 标准残差不断做 hₗ₊₁ = hₗ + Fₗ(hₗ)。它很利于梯度传播,但越早的特征会在统一累加中混在一起。 + Full AttnRes 为每一层设置可学习 pseudo-query,对 embedding 和所有先前层输出计算权重,再按权重组合。 + 这里的“Query”不是当前 Token 内容,而是“第 l 层通常希望从哪些深度取信息”的可学习参数。 +

+ +
+ αᵢ→ₗ = exp(qₗᵀ · RMSNorm(kᵢ)) / Σⱼ exp(qₗᵀ · RMSNorm(kⱼ))
+ hₗ = Σᵢ αᵢ→ₗ · vᵢ + + 对应 K3 Report Eq. 8–9 的简化展示。RMSNorm 防止幅值大的层仅凭数值尺度垄断权重。 + +
+ +

为什么又要做 Block AttnRes

+

+ Full AttnRes 的层数平方计算在不足 100 层时并不离谱,真正麻烦是保留所有层输出带来的内存与流水线跨 stage 通信。 + K3 把层分成 block:block 内先求和,跨 block 才做完整深度注意力。报告称经验上约 8 个 block 可保留大部分收益; + K3 使用 12 层一个 block,加上 embedding 来源,总计形成 9 个深度来源组。 +

+
+ 当前证据边界 +

+ Kimi Team 已公开 Attention Residuals 独立预印本, + 在 48B-total / 3B-active 模型上用 1.4T Token 做了 scaling 与消融;K3 则证明它能进入 2.8T 系统。 + 但它仍是 2026 年的新方法,第三方复现和跨架构外部有效性需要持续积累。 +

+
+
+ +
+

05 STABLE LATENTMOE

+

896 选 16:极稀疏带来容量,也放大不稳定

+

+ 传统 MoE 让被选中的每个专家都处理完整 d 维 Token。选更多专家时,不只计算变多, + Token 跨设备发送的数据和专家权重读取也随 routing multiplicity 增长。 + LatentMoE 把通用的 full-width 路径留给 shared experts,把 routed experts 放进较窄 latent space: + K3 主干宽度 7168,路由 latent 维度 3584。 +

+ + + +

Stable 具体在稳定什么

+

报告指出极端稀疏度会放大两个失败模式:routed path 连续多次矩阵乘导致内部激活爆炸;近千专家的负载难以靠旧的无辅助损失 bias update 稳定平衡。K3 加入三项修复:

+
    +
  1. Normalized LatentMoE:在上投影之前加入 RMSNorm,阻止 routed aggregate 的尺度失控。
  2. +
  3. SiTU-GLU:用有界的 tanh 分支近似 SwiGLU 的近原点行为,同时限制大正输入的输出幅值。
  4. +
  5. Quantile Balancing:不只盯平均负载,而用路由分数的分位统计更新专家 bias,适应近千专家下更复杂的分布。
  6. +
+

+ 这条技术线与 DeepSeekMoE 紧密相连:shared experts 保存公共知识,细粒度 routed experts 促进专业化。 + K3 再借 LatentMoE 让“选 16 个专家”的通信和权重读取可承受,并为极端稀疏补上稳定性机制。 +

+
+ +
+

06 NATIVE VISION & MUON

+

视觉是第一类输入;优化器也按注意力头重新分组

+

MoonViT-V2 的角色

+

+ 401M 参数 MoonViT-V2 将图片与视频编码成视觉特征,轻量 projector 把它们映射到语言主干的 embedding space。 + “原生”最重要的含义不是“能看图”,而是视觉数据在预训练阶段就进入统一模型;后训练中的 Agent 还能把截图、 + 图表、裁剪/缩放后的新图片当作连续 observation,形成看—行动—再看的闭环。 +

+

+ 报告描述了渐进式多模态训练:先固定语言模型训练视觉组件,再逐步解冻主干;多模态编码器优化则涉及动态分辨率、 + packing 与避免视觉计算造成流水线 bubble。完整视觉谱系会从 ViT、CLIP、Flamingo、BLIP-2、LLaVA 讲到 Kimi-VL。 +

+ +

Per-Head Muon 为什么出现

+

+ Muon 在矩阵更新上做正交化,目标是比逐元素 Adam 更好地控制隐藏层更新。K3 采用 per-head 分组: + 对 Q/K/V 等多头投影,按 head 分开应用 Muon,而不是把整块矩阵当作一个整体。 + 直觉上,每个 head 是相对独立的子空间,按 head 归一更新可减少大矩阵不同部分相互干扰。 +

+
+ 不要把优化器效果和架构效果混为一谈 +

+ 报告把 Per-Head Muon 放进统一训练配方,但整体 2.5× scaling efficiency 并不是单项优化器消融结论。 + Muon 的通用可扩展性应另外阅读 Muon is Scalable for LLM Training。 +

+
+
+ +
+

07 PRE-TRAINING

+

预训练:扩展的不只是参数,还有数据、长度和数值配方

+

+ K3 报告将模型能力的提升明确归因于架构、数据和训练 recipe 的共同作用,但没有公开足以复现的完整语料配比。 + 这需要区分两件事:我们可以准确解释训练阶段和公开机制,却不能根据少量描述虚构完整数据集。 +

+ +

Scaling Law 在这里怎样用

+

+ 团队先在较小规模训练一系列模型,拟合 loss 与参数、数据和计算之间的关系,再用它比较架构候选与估计 2.8T 模型的预算。 + K3 所称约 2.5× overall scaling efficiency,是相对 K2 的经验缩放效率:在相同计算下取得更低 loss,或达到同等 loss 所需计算更少。 + 它不是“推理速度提高 2.5×”,也不是所有下游任务统一提升 2.5×。 +

+ +

长上下文不是把配置里的 32K 改成 1M

+

+ 上下文扩展需要长度 curriculum、长文档数据、并行策略和稳定训练。K3 的 NoPE MLA 避免 RoPE 外推参数; + KDA 的递归/块并行结构降低长序列成本;系统侧再用 KDA Context Parallelism 分摊状态与 chunk。 + 最后还要在 post-training 里真正让模型经历长轨迹,否则“窗口能装下”不等于“模型会有效使用”。 +

+
+ 窗口容量 vs. 使用能力 +

+ 能把一百万 Token 放进输入,像图书馆允许你搬进一百万字;能否跨文档找到证据、维持任务状态并避免遗忘, + 才是在考你是否真的读懂。K3 同时用架构、长程 RL 和上下文管理训练这件事。 +

+
+
+ +
+

08 POST-TRAINING

+

九位“专家老师”,最后蒸馏成一个可调思考强度的模型

+

+ K3 的 post-training 覆盖 SFT 与 RL,RL 按三类 domain 与三种 reasoning effort 组织: + general reasoning/knowledge、agentic、coding × low/high/max,形成九个专业策略。 + 然后用 Multi-Teacher On-Policy Distillation(MOPD)把它们整合进统一学生模型。 +

+ +
+
DOMAIN × EFFORT
+ LOWHIGHMAX + REASONINGRₗRₕRₘ + AGENTICAₗAₕAₘ + CODINGCₗCₕCₘ +
+ +

为什么要训练不同 reasoning effort

+

+ “更久思考”会提高部分难题表现,也会增加延迟、成本和过度思考。K3 通过预算控制参数训练 max/high/low 专家: + 先在较大预算下追求能力,再逐步退火得到更短策略。不同 domain 的预算调整由人工参与配置, + 因为一道数学题、一次网页研究和一个代码仓库任务的合理轨迹长度并不相同。 +

+ +

On-policy distillation 为什么比离线模仿更适合长轨迹

+

+ 普通蒸馏常让学生模仿教师已经生成的固定答案;学生一旦在真实生成中走到不同前缀,教师数据就失去覆盖。 + On-policy distillation 让学生自己生成当前前缀,再在这个前缀上比较教师和学生对下一个 Token 的概率, + 形成稠密 reward。这样训练分布更贴近学生真正会访问的状态,也能自然结合 partial rollout。 +

+ +

部署约束直接进入后训练

+

+ K3 从 SFT 开始对 MoE expert weights 使用 MXFP4 QAT,expert activations 使用 MXFP8; + RL rollout 和训练采用相同量化方案,减少训练—推理失配。预训练中的 MTP 层随后被微调为 EAGLE-3 风格 draft model, + 用低/中/高层 AttnRes 特征预测候选 Token,并直接优化与无损推测采样接受率相关的 LK loss。 +

+
+ +
+

09 AGENTIC RL

+

Agent 能力不是只靠“更聪明”,而是靠环境提供可学习的反馈

+

+ K3 报告最值得细读的部分之一,是它把 Agent 后训练写成环境工程:工具、system prompt、context management、 + skills、memory、subagents 和 harness 都成为可组合变量。训练时动态实例化 Kimi Code、Claude Code、Codex、 + OpenClaw、Hermes 等风格,避免模型过拟合一套固定工具 schema。 +

+ +

六类环境回答六种失败模式

+
+
01

可验证搜索与专业工作

多步检索、投行、数据分析、法律交付物;奖励落在证据和最终成果。

+
02

视觉推理

模型在隔离 Python 环境里裁剪、放大、计算并把新图片作为 observation。

+
03

GPU Kernel 优化

先过数值正确性,再比较专家实现与硬件 roofline,并检测缓存/降精度等作弊。

+
04

长期个人助理

用 Gmail、Notion、Slack 等 mock app 构造跨多日事件;单次可达数千工具调用。

+
05

Autonomous Execution

只给初始状态、目标、约束、工具和 verifier,不提供参考轨迹;奖励最终环境状态。

+
06

Web 开发

容器内构建网页、游戏、3D、可视化;功能测试、结构/像素相似与模型检查共同评分。

+
+ +

为什么 verifier 比“模型说完成了”更重要

+

+ 长任务最常见的失败之一,是 Agent 输出一段令人信服的总结,却没有真正改变目标状态。 + K3 的 AET 把 reward 绑定到独立 verifier 读取的环境结果;public verifier 提供诊断, + hidden verifier 检查保留场景,并限制提交预算以减少 reward hacking。 +

+
+ 这条主线会贯穿 Agent 专题 +

+ 可靠 Agent 的学习单位不是“一条漂亮回答”,而是状态明确、动作可执行、反馈可验证的一整段轨迹。 + Harness 多样化、持久环境和独立 verifier,分别处理接口过拟合、短视行为和自我宣告成功。 +

+
+
+ +
+

10 INFRASTRUCTURE

+

2.8T 参数与 1M 轨迹,迫使系统重新设计状态放在哪里

+

+ K3 基础设施可以按三类状态理解:模型状态(参数、优化器)、序列状态(KDA state、KV Cache)、 + 环境状态(代码仓库、应用、microVM)。三类状态的寿命和移动成本完全不同。 +

+ +
+
ONLINE SERVING

请求级状态

KDA-aware prefix cache、专用 kernel、cache/budget-aware fleet scheduling,把共享前缀和不同思考预算纳入调度。

+
1M AGENTIC RL

轨迹级状态

partial rollout、外置 KV retention、adaptive throttling 与可恢复 microVM,避免每次更新都丢掉漫长轨迹。

+
3T PRE-TRAIN

训练级状态

MoonEP 用静态计算形状、平衡专家执行与 zero-copy communication,配合内存优化和多模态 encoder 调度。

+
KDA CO-DESIGN

算子级状态

针对不同序列 regime 的 fused kernel、KDA Context Parallelism 与状态感知前缀缓存。

+
+ +

MoonEP 在解决什么

+

+ MoE 的理论 FLOPs 很漂亮,真实系统却可能被“这个专家突然收到太多 Token”拖垮。 + 跨卡 all-to-all 通信、专家权重读取和不规则 shape 都会制造等待。K3 报告称 MoonEP 追求 perfectly balanced expert execution, + 使用静态计算形状和零拷贝通信把路由后的 Token 送到对应专家。这里的“平衡”是系统执行层结果,不等于路由概率天然均匀; + 它和模型侧 Quantile Balancing 是互补层次。 +

+ +

为什么长程 RL 需要保留外部状态

+

+ 传统 RL rollout 常在模型更新后重新生成。若一条轨迹已经调用工具几百次、积累几十万 Token, + 重新生成会浪费巨大。K3 将 KV Cache 放到外部、允许 partial rollout 暂停并续接; + 同时把工具环境放进可恢复 microVM,使代码、文件和应用状态与语言上下文一起跨训练 step 存续。 +

+
+ +
+

11 EVALUATION & LIMITS

+

K3 很强,但报告也明确说它总体仍落后最强闭源模型

+

+ 官方报告的总体表述很克制:K3 在其评测套件中领先被比较的其他开放与部分闭源模型, + 但整体仍落后 Claude Fable 5 与 GPT-5.6 Sol。理解这句话,比挑一个 K3 第一名的榜单更重要。 +

+ +

评测数字至少要带四个脚注

+
    +
  1. 思考预算:K3 主结果使用 reasoning effort=max,其他模型也尽量用 max/xhigh;成本和延迟不是相同维度。
  2. +
  3. Harness:代码与 Agent 分数是“模型 + Codex/Kimi Code/Claude Code 等脚手架”的系统结果。
  4. +
  5. 工具增强:HLE、视觉数学等同时报告不用工具/用工具,不能把两列混为纯模型能力。
  6. +
  7. Fallback / Guard:某些闭源模型出现 fallback、拒答或 cyber guard,可能显著影响特定任务分数。
  8. +
+ +

+ 例如 BrowseComp 使用 300K Token 触发上下文压缩时 K3 报告 91.2;完整 1M 窗口、不做上下文管理时是 90.4。 + 这反而给出重要工程信号:更大的窗口不自动消灭 context management,适时压缩可能更有效。 +

+ +
+ 我们当前还不能知道的事 +

+ 报告没有给出足以独立复现的完整数据配比、总训练 token 数、全部集群规模与训练成本; + 新架构也缺少广泛第三方复现。网站会持续加入开放权重评测和独立复现,但不会用参数量或单榜第一替代综合判断。 +

+
+
+ +
+

PRIMARY SOURCES

+

读完本页以后,下一步回到这些一手材料

+ + +
+
+
+ + +
diff --git a/src/pages/papers/index.astro b/src/pages/papers/index.astro new file mode 100644 index 0000000..c14bae0 --- /dev/null +++ b/src/pages/papers/index.astro @@ -0,0 +1,636 @@ +--- +import BaseLayout from "@/layouts/BaseLayout.astro"; +import { papers, paperTopics } from "@/data/papers"; + +const sortedPapers = [...papers].sort((a, b) => b.year - a.year || a.title.localeCompare(b.title)); +const verifiedCount = papers.filter((paper) => paper.verified).length; +const spotlightCount = papers.filter((paper) => paper.spotlight).length; +const firstYear = Math.min(...papers.map((paper) => paper.year)); +const lastYear = Math.max(...papers.map((paper) => paper.year)); +const filters = [ + { id: "all", label: "全部" }, + ...paperTopics.map((topic) => ({ id: topic, label: topic })), + { id: "Kimi", label: "Kimi" }, + { id: "DeepSeek", label: "DeepSeek" }, +]; +--- + + +
+
+

LIBRARY / 01 PRIMARY SOURCES

+

不是论文坟场,
而是一张演化地图

+

+ 每一篇只回答两个问题:它解决了上一代路线的什么困难,又把什么新问题留给了后来者。 + 你可以按专题筛选,也可以沿 Kimi / DeepSeek 两条聚光主线回看技术汇流。 +

+
+
+
INDEXED
{papers.length} 篇
+
SPAN
{firstYear}—{lastYear}
+
LINK CHECKED
{verifiedCount} 篇
+
SPOTLIGHT
{spotlightCount} 篇
+
+
+ +
+
+
+

01 CURATED INDEX

+

从问题出发,再去读论文

+
+

+ “主链接已核验”只代表题名与权威入口经过检查,不代表我们复现了全部实验。 + 深度精读、公式推导与架构图会逐章进入专题正文;这里先负责帮你找到正确入口。 +

+
+ +
+ +
+ {filters.map((filter, index) => ( + + ))} +
+
+ {papers.length} + 篇论文可见 +
+
+ +
+ {sortedPapers.map((paper, index) => { + const searchable = [ + paper.year, + paper.title, + paper.contribution, + ...paper.topics, + paper.spotlight ?? "", + ].join(" ").toLocaleLowerCase("zh-CN"); + const filterTokens = [...paper.topics, paper.spotlight].filter(Boolean).join("|"); + + return ( +
+
{String(index + 1).padStart(3, "0")}
+ +
+
+

+ {paper.title} +

+ {paper.spotlight && {paper.spotlight}} +
+

{paper.contribution}

+
+ {paper.topics.map((topic) => {topic})} + {paper.verified && 主链接已核验} +
+
+ +
+ ); + })} +
+ + +
+ +
+

02 HOW TO READ

+

别从摘要一路硬啃到附录

+
+
01

先找旧瓶颈

作者认为上一代方法哪里太慢、太贵、不稳定或不够通用?

+
02

再看核心替换

是哪一个数据流、损失函数或系统边界被重新设计?先画图,再看公式。

+
03

盯住公平对照

参数量、激活量、训练 token、硬件和推理预算是否真的可比?

+
04

最后追后继者

真正重要的想法,会被下一篇论文复用、修正,或暴露新的代价。

+
+
+ + +
+ + diff --git a/src/pages/progress/index.astro b/src/pages/progress/index.astro new file mode 100644 index 0000000..31d8533 --- /dev/null +++ b/src/pages/progress/index.astro @@ -0,0 +1,372 @@ +--- +import BaseLayout from "@/layouts/BaseLayout.astro"; +import { chapters } from "@/data/chapters"; + +const average = Math.round(chapters.reduce((sum, chapter) => sum + chapter.progress, 0) / chapters.length); +const published = chapters.filter((chapter) => chapter.status === "published").length; +const researching = chapters.filter((chapter) => ["researching", "drafting"].includes(chapter.status)).length; + +const workstreams = [ + { label: "研究框架与规范", value: 72, next: "给 125 篇索引补充逐篇精读层级" }, + { label: "网站设计系统", value: 86, next: "打印样式与更多通用可视化组件" }, + { label: "Kimi K3 深读", value: 55, next: "扩写 scaling / infra 逐图笔记" }, + { label: "Transformer 基础", value: 52, next: "加入矩阵形状动画与手算练习" }, + { label: "DeepSeek 专题", value: 54, next: "MLA 与 GRPO 完整公式推导" }, + { label: "引用与事实检查", value: 48, next: "自动化外链复查与来源等级扩展" }, + { label: "开源与部署", value: 18, next: "首次提交、远端仓库与 HTTPS" }, +]; +--- + + +
+
+
+

PUBLIC LEDGER BUILD IN THE OPEN

+

庞大工作需要一份
公开、可检查的账本

+

+ 这里不把“正在研究”包装成“已经完成”。每个专题显示成熟度、下一检查点和证据边界; + 本地 PROGRESS.md 与网站同步维护。 +

+
+
+
OVERALL
专题平均 {average}%
+
READABLE
{published} 个首版可读专题
+
ACTIVE
{researching} 个研究/写作中
+
UPDATED
2026-07-28 21:55 CST
+
MODE
持续迭代,不锁死版本
+
+
+
+ +
+
+
+

01 WORKSTREAMS

+

七条工作流同时推进,但不混淆“有页面”和“已核验”

+
+

+ 内容首版优先打通全局脉络;随后每轮迭代选择一个专题推进到论文/工程层,并做独立事实复核。 +

+
+ +
+ {workstreams.map((stream, index) => ( +
+ {String(index + 1).padStart(2, "0")} +
+

{stream.label}

+

下一检查点:{stream.next}

+
+
+ {stream.value}% +
+
+
+ ))} +
+
+ +
+
+
+

02 COMPLETED THIS ITERATION

+

第一轮已经落地什么

+
+

下列项目都能在仓库或网站中直接检查,不是计划项。

+
+
+

研究目标已持久化

总体路线、完成标准、来源等级与进度账本已写入项目。

+

K3 报告已结构化拆解

47 页报告目录、151 条参考来源和架构/后训练/系统主线已经提取。

+

16 专题知识图

从语言模型基础到评测安全,包含先修依赖和三条贯穿案例。

+

编辑式网站系统

响应式导航、章节模板、侧栏、进度、论文链和证据提示组件。

+

三张原创交互图

K3 三轴架构、Self-Attention Query 实验与 DeepSeek 技术谱系。

+

三篇首版长文

K3 完整导读、Transformer 基础与 DeepSeek 论文谱系。

+

125 篇关键论文索引

覆盖 12 个专题,支持全文搜索、标签筛选与 Kimi/DeepSeek 聚光主线。

+
+
+ +
+
+
+

03 NEXT QUEUE

+

下一批按“能闭环的专题”推进

+
+

优先级由 K3 依赖度、初学者断点和论文可验证性共同决定。

+
+
+
优先级专题本轮交付完成闸门
+
P0长上下文与高效注意力

FlashAttention → MLA → Delta Rule → Kimi Linear/KDA

6 张图 + 20 篇论文
+
P0稀疏计算与 MoE

Switch → DeepSeekMoE → LatentMoE → Stable LatentMoE

路由模拟器 + 通信账本
+
P1推理模型与测试时扩展

CoT → verifier → GRPO → R1 → k1.5 → K3 MOPD

奖励/预算交互图
+
P1大规模训练系统

ZeRO/Megatron → Expert/Context Parallel → DualPipe/MoonEP

显存与通信计算器
+
P2原生多模态

ViT/CLIP → connector VLM → Kimi-VL/MoonViT-V2

视觉 Token 流程图
+
+
+ +
+
+
+

04 QUALITY CONTROL

+

每条结论怎样进入网站

+
+

+ Grok CLI 用于扩大检索覆盖和找遗漏;任何进入正文的机制、数字与时间仍回到原论文、官方仓库或正式文档。 +

+
+
+
01 / DISCOVER

发现线索

K3 references、引用网络、Grok/web 检索、作者仓库。

+ +
02 / VERIFY

打开一手来源

核对标题、版本、公式、表格、实验设置和限制。

+ +
03 / EXPLAIN

写四层解释

直觉、机制、论文证据、工程代价;简化处显式标注。

+ +
04 / REVIEW

交叉检查

链接、数字、先修、图文一致性、移动端与可访问性。

+
+
+ +
+
+
+

05 DECISION LEDGER

+

重要决策不会只留在对话里

+
+

更完整的机器可读进度和研究记录位于开源仓库的 ROADMAP.md、PROGRESS.md 与 research/。

+
+
+
命名为 LLM Atlas

K3 是锚点,范围覆盖完整 LLM 技术史。

+
按问题链组织

现象 → 旧瓶颈 → 关键论文 → 后继桥梁 → K3/DeepSeek 落点。

+
优先原创重绘

架构图做成可缩放 SVG/HTML,明确简化与来源。

+
双重开放许可

代码 MIT,原创文字与图 CC BY-SA 4.0。

+
自托管交付

源码公开到 git.k1412.top,网站部署到 k1412 私有基础设施。

+
+
+ + +
diff --git a/src/pages/roadmap/index.astro b/src/pages/roadmap/index.astro new file mode 100644 index 0000000..713cc5a --- /dev/null +++ b/src/pages/roadmap/index.astro @@ -0,0 +1,468 @@ +--- +import BaseLayout from "@/layouts/BaseLayout.astro"; +import { chapters, statusLabel } from "@/data/chapters"; + +const totalPapers = chapters.reduce((sum, chapter) => sum + chapter.papers, 0); +const averageProgress = Math.round(chapters.reduce((sum, chapter) => sum + chapter.progress, 0) / chapters.length); + +const stages = [ + { label: "A · 起点", items: ["00", "01"] }, + { label: "B · 核心架构", items: ["02", "03", "04", "05"] }, + { label: "C · 规模化", items: ["06", "07", "08", "09"] }, + { label: "D · 行为与能力", items: ["10", "11", "12", "13"] }, + { label: "E · 落地与判断", items: ["14", "15"] }, +]; +--- + + +
+
+
+

CURRICULUM / 00 LEARNING GRAPH

+

先知道自己在哪里,
再决定往哪里深入

+

+ 16 个专题不是一条必须顺序走完的直线。它们组成有依赖的图: + Transformer 是共同地基,MoE/长上下文/训练系统相互牵引,后训练再通向推理与 Agent。 +

+
+
+
MODULES
16 个专题
+
PAPER SLOTS
{totalPapers} 篇核心论文位
+
PATHS
4 条推荐路径
+
PROGRESS
首版平均 {averageProgress}%
+
DEPTH
L0 直觉 → L3 工程
+
+
+
+ +
+
+
+

01 DEPENDENCY GRAPH

+

从左到右,是知识依赖,不是历史年份

+
+

+ 一篇论文可能跨多个专题。例如 DeepSeek-V3 同时属于 MoE、训练系统、低精度和后训练; + K3 则是几乎全部主线的汇流点。 +

+
+ + + +
+
普通节点:专题章节
+
关键枢纽:被多条路径依赖
+
建议先修方向
+
+
+ +
+
+
+

02 FOUR ROUTES

+

四条路径,四种不同的“读懂”

+
+

路线可以交叉。每条路线的终点不是记住术语,而是具备一项可验证的阅读或设计能力。

+
+ +
+
+ ROUTE A · BEGINNER +

从零建立架构直觉

+

01 → 02 → 03 → 04 → 10

+
    +
  1. 解释 next-token objective
  2. +
  3. 手算一次 self-attention
  4. +
  5. 画出 decoder block
  6. +
  7. 区分 pretrain 与 post-train
  8. +
+
+
+ ROUTE B · K3 REVERSE +

从 K3 反向拆组件

+

K3 → 07 → 06 → 03 → 11 → 08/14

+
    +
  1. 解释三维信息流
  2. +
  3. 比较 KDA 与 MLA
  4. +
  5. 解释 2.8T / 104B
  6. +
  7. 读懂 1M Agentic RL 系统
  8. +
+
+
+ ROUTE C · DEEPSEEK +

沿论文看算法—系统协同

+

04 → 06 → 07 → 09 → 11 → 12

+
    +
  1. 推导 MLA 缓存压缩
  2. +
  3. 理解 FP8 scaling
  4. +
  5. 区分 PPO 与 GRPO
  6. +
  7. 对照 V4 与 K3 长上下文
  8. +
+
+
+ ROUTE D · SYSTEMS +

跟一个 Token 穿过真实集群

+

02 → 04 → 08 → 09 → 14 → 15

+
    +
  1. 做显存与 FLOPs 账本
  2. +
  3. 选择并行切分
  4. +
  5. 理解 KV Cache 与调度
  6. +
  7. 设计评测 harness
  8. +
+
+
+
+ +
+
+
+

03 ALL MODULES

+

每个专题都有问题、先修、论文和完成标准

+
+

+ “研究中”表示资料已建立但正文未完成;“首版可读”表示已有连贯解释,不代表内容已经停止迭代。 +

+
+ +
+ {chapters.map((chapter) => ( +
+
+ {chapter.number} + {chapter.kicker} +
+
+
+

{chapter.title}

+ {statusLabel[chapter.status]} +
+

{chapter.question}

+

{chapter.summary}

+
+ {chapter.highlights.map((item) => {item})} +
+
+ +
+ ))} +
+
+ +
+
+
+

04 DEFINITION OF DONE

+

什么时候一个专题才算真正完成

+
+

完成不是“字数够长”。每个专题必须通过结构、事实、来源、教学、对照和可访问性六道闸门。

+
+
+
01

问题链

旧方法为何失败、新方法改变什么、怎样通向下一篇论文。

+
02

一手证据

8–20 篇核心论文,数字与结论链接到原始来源。

+
03

视觉推导

至少两张可缩放图和一个交互实验或逐步动画。

+
04

贯穿对照

明确回答这项技术在 K3 与 DeepSeek 中怎样出现。

+
+
+ + +
diff --git a/src/styles/global.css b/src/styles/global.css new file mode 100644 index 0000000..e1e0140 --- /dev/null +++ b/src/styles/global.css @@ -0,0 +1,1356 @@ +@layer reset, base, components, utilities; + +@layer reset { + *, + *::before, + *::after { + box-sizing: border-box; + } + + html { + scroll-behavior: smooth; + } + + body, + h1, + h2, + h3, + h4, + p, + figure, + blockquote, + dl, + dd { + margin: 0; + } + + img, + svg { + display: block; + max-width: 100%; + } + + button, + input { + font: inherit; + } +} + +@layer base { + :root { + --paper: #f4f1ea; + --paper-raised: #faf8f3; + --paper-deep: #eae5db; + --ink: #27364a; + --ink-strong: #1c293b; + --muted: #687589; + --muted-light: #8d98a7; + --line: rgba(39, 54, 74, 0.17); + --line-strong: rgba(39, 54, 74, 0.34); + --copper: #ad6445; + --copper-pale: #ead8ce; + --sage: #557a72; + --sage-pale: #dce7e2; + --violet: #6d6687; + --violet-pale: #e3dfeb; + --sky: #627f99; + --sky-pale: #dfe7ec; + --display: "Inter", "SF Pro Display", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif; + --text: "Inter", "SF Pro Text", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif; + --serif: "Iowan Old Style", "Source Han Serif SC", "Songti SC", "STSong", serif; + --mono: "SFMono-Regular", "Cascadia Code", "JetBrains Mono", monospace; + --page: min(1380px, calc(100vw - 72px)); + --reading: 780px; + color-scheme: light; + } + + body { + min-width: 320px; + background: + radial-gradient(circle at 87% 8%, rgba(139, 160, 174, 0.11), transparent 22rem), + radial-gradient(circle at 62% 37%, rgba(183, 128, 99, 0.07), transparent 28rem), + var(--paper); + color: var(--ink); + font-family: var(--text); + font-size: 16px; + line-height: 1.78; + text-rendering: optimizeLegibility; + } + + ::selection { + background: var(--copper-pale); + color: var(--ink-strong); + } + + a { + color: inherit; + text-decoration-thickness: 1px; + text-underline-offset: 0.18em; + } + + a:focus-visible, + button:focus-visible { + outline: 2px solid var(--copper); + outline-offset: 4px; + } + + h1, + h2, + h3, + h4 { + color: var(--ink-strong); + font-family: var(--display); + font-weight: 650; + letter-spacing: -0.035em; + line-height: 1.13; + } + + h1 { + font-size: clamp(3.2rem, 7vw, 7.6rem); + } + + h2 { + font-size: clamp(2rem, 3.8vw, 4.25rem); + } + + h3 { + font-size: clamp(1.15rem, 1.5vw, 1.45rem); + letter-spacing: -0.02em; + } + + code, + kbd { + font-family: var(--mono); + } +} + +@layer components { + .reading-progress { + position: fixed; + z-index: 100; + inset: 0 0 auto; + height: 3px; + overflow: hidden; + } + + .reading-progress span { + display: block; + width: 100%; + height: 100%; + background: var(--copper); + transform: scaleX(0); + transform-origin: left; + } + + .site-header { + position: sticky; + z-index: 80; + top: 0; + display: grid; + grid-template-columns: 1fr auto 1fr; + align-items: center; + min-height: 72px; + padding: 0 max(28px, calc((100vw - 1380px) / 2)); + border-bottom: 1px solid var(--line); + background: color-mix(in srgb, var(--paper) 88%, transparent); + backdrop-filter: blur(18px); + } + + .wordmark { + display: inline-flex; + align-items: center; + justify-self: start; + gap: 13px; + text-decoration: none; + } + + .wordmark-mark, + .footer-mark { + display: grid; + place-items: center; + width: 42px; + aspect-ratio: 1; + border-radius: 8px; + background: var(--ink); + color: var(--paper-raised); + font: 700 0.73rem/1 var(--mono); + letter-spacing: -0.06em; + text-decoration: none; + } + + .wordmark-copy { + display: grid; + line-height: 1.1; + } + + .wordmark-copy b { + font-size: 0.74rem; + letter-spacing: 0.2em; + } + + .wordmark-copy small { + margin-top: 6px; + color: var(--muted); + font-family: var(--mono); + font-size: 0.48rem; + letter-spacing: 0.1em; + } + + .top-nav { + display: flex; + align-items: center; + gap: 34px; + } + + .top-nav a { + position: relative; + color: var(--muted); + font-size: 0.83rem; + text-decoration: none; + } + + .top-nav a:hover, + .top-nav a[aria-current="page"] { + color: var(--ink); + } + + .top-nav a[aria-current="page"]::after { + position: absolute; + right: 0; + bottom: -24px; + left: 0; + height: 2px; + background: var(--copper); + content: ""; + } + + .header-meta { + display: flex; + align-items: center; + justify-self: end; + gap: 18px; + color: var(--muted); + font: 0.62rem/1 var(--mono); + letter-spacing: 0.15em; + } + + .menu-toggle { + display: none; + padding: 9px 12px; + border: 1px solid var(--line-strong); + border-radius: 5px; + background: transparent; + color: var(--ink); + cursor: pointer; + } + + .mobile-nav { + display: none; + } + + .hero, + .page-hero { + position: relative; + overflow: hidden; + border-bottom: 1px solid var(--line); + } + + .hero::before, + .page-hero::before { + position: absolute; + top: -22rem; + right: -10rem; + width: 52rem; + height: 52rem; + border-radius: 44% 56% 62% 38%; + background: + radial-gradient(circle at 43% 47%, rgba(92, 127, 151, 0.16), transparent 31%), + radial-gradient(circle at 65% 38%, rgba(173, 100, 69, 0.12), transparent 24%); + filter: blur(24px); + content: ""; + transform: rotate(13deg); + } + + .hero-inner { + position: relative; + display: grid; + grid-template-columns: minmax(0, 1fr) 310px; + gap: 80px; + align-items: end; + width: var(--page); + min-height: min(780px, calc(100vh - 72px)); + margin-inline: auto; + padding: 100px 40px 80px; + } + + .hero-copy { + max-width: 950px; + } + + .eyebrow { + display: flex; + align-items: center; + gap: 13px; + margin-bottom: 22px; + color: var(--muted); + font: 700 0.68rem/1.4 var(--mono); + letter-spacing: 0.2em; + text-transform: uppercase; + } + + .eyebrow span { + color: var(--copper); + } + + .hero h1 { + max-width: 990px; + text-wrap: balance; + } + + .hero h1 em { + display: block; + margin-top: 12px; + color: var(--muted); + font-family: var(--serif); + font-size: 0.43em; + font-weight: 450; + letter-spacing: 0; + } + + .hero-deck { + max-width: 790px; + margin-top: 36px; + color: #4f6075; + font-size: clamp(1.05rem, 1.4vw, 1.25rem); + line-height: 1.9; + } + + .hero-actions { + display: flex; + flex-wrap: wrap; + gap: 12px; + margin-top: 34px; + } + + .button { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 46px; + padding: 0 19px; + border: 1px solid var(--line-strong); + border-radius: 6px; + background: transparent; + color: var(--ink); + font-size: 0.88rem; + text-decoration: none; + transition: transform 160ms ease, background-color 160ms ease; + } + + .button:hover { + transform: translateY(-2px); + } + + .button.primary { + border-color: var(--ink); + background: var(--ink); + color: var(--paper-raised); + } + + .hero-aside { + position: relative; + padding-left: 30px; + border-left: 1px solid var(--line); + } + + .hero-aside > span { + color: var(--muted); + font: 0.65rem/1 var(--mono); + letter-spacing: 0.18em; + } + + .hero-aside > strong { + display: block; + margin: 18px 0 8px; + color: var(--ink); + font: 700 1.55rem/1.2 var(--mono); + } + + .hero-aside > p { + color: var(--muted); + font-size: 0.82rem; + } + + .hero-stats { + display: grid; + margin-top: 28px; + border-top: 1px solid var(--line); + } + + .hero-stats div { + display: grid; + grid-template-columns: 52px 1fr; + align-items: center; + min-height: 46px; + border-bottom: 1px solid var(--line); + } + + .hero-stats b { + font: 700 0.95rem/1 var(--mono); + } + + .hero-stats span { + color: var(--muted); + font-size: 0.75rem; + } + + .scope-strip { + position: relative; + display: grid; + grid-template-columns: 105px 1fr auto; + gap: 28px; + align-items: center; + width: var(--page); + margin: 0 auto; + padding: 24px 40px; + border-top: 1px solid var(--line); + } + + .scope-strip > span { + color: var(--muted); + font-size: 0.75rem; + } + + .scope-strip p { + color: #526177; + font-size: 0.9rem; + } + + .scope-strip a { + color: var(--copper); + font: 0.72rem/1 var(--mono); + text-decoration: none; + } + + .section { + width: var(--page); + margin-inline: auto; + padding: 104px 40px; + border-bottom: 1px solid var(--line); + } + + .section.compact { + padding-block: 72px; + } + + .section-heading { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(300px, 0.55fr); + gap: 70px; + align-items: end; + margin-bottom: 52px; + } + + .section-heading .eyebrow { + margin-bottom: 18px; + } + + .section-heading h2 { + max-width: 850px; + } + + .section-lead { + color: #526177; + font-size: 1.05rem; + line-height: 1.9; + } + + .thesis { + display: grid; + grid-template-columns: 140px 1fr; + gap: 34px; + max-width: 1060px; + margin-bottom: 54px; + padding: 26px 0 26px 28px; + border-left: 3px solid var(--sky); + } + + .micro-label { + color: var(--muted); + font: 700 0.65rem/1.5 var(--mono); + letter-spacing: 0.14em; + text-transform: uppercase; + } + + .thesis p { + color: var(--ink); + font-size: 1.18rem; + line-height: 1.9; + } + + .feature-grid, + .method-grid, + .chapter-grid { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + border-top: 1px solid var(--line); + border-left: 1px solid var(--line); + } + + .feature-card, + .method-card, + .chapter-card { + min-height: 240px; + padding: 28px; + border-right: 1px solid var(--line); + border-bottom: 1px solid var(--line); + background: color-mix(in srgb, var(--paper-raised) 35%, transparent); + } + + .feature-card .card-number, + .method-card .card-number { + display: block; + margin-bottom: 42px; + color: var(--muted-light); + font: 0.75rem/1 var(--mono); + } + + .feature-card p, + .method-card p { + margin-top: 14px; + color: var(--muted); + font-size: 0.88rem; + } + + .pathways { + display: grid; + grid-template-columns: 220px 1fr; + gap: 46px; + } + + .path-tabs { + display: grid; + align-content: start; + border-top: 1px solid var(--line); + } + + .path-tabs button { + display: grid; + grid-template-columns: 34px 1fr; + gap: 12px; + align-items: center; + min-height: 62px; + padding: 0 12px; + border: 0; + border-bottom: 1px solid var(--line); + background: transparent; + color: var(--muted); + text-align: left; + cursor: pointer; + } + + .path-tabs button span { + color: var(--muted-light); + font: 0.68rem/1 var(--mono); + } + + .path-tabs button[aria-selected="true"] { + background: var(--ink); + color: var(--paper-raised); + } + + .path-tabs button[aria-selected="true"] span { + color: var(--copper-pale); + } + + .path-panel { + display: none; + } + + .path-panel[data-active] { + display: grid; + grid-template-columns: minmax(0, 1fr) 260px; + gap: 34px; + align-items: stretch; + } + + .path-copy { + padding: 34px; + border: 1px solid var(--line); + background: var(--paper-raised); + } + + .path-copy .micro-label { + color: var(--copper); + } + + .path-copy h3 { + margin: 14px 0 16px; + font-size: 1.8rem; + } + + .path-copy p { + color: #516077; + } + + .path-copy ol { + display: grid; + gap: 12px; + margin: 24px 0 0; + padding: 0; + list-style: none; + counter-reset: step; + } + + .path-copy li { + display: grid; + grid-template-columns: 30px 1fr; + gap: 12px; + counter-increment: step; + } + + .path-copy li::before { + display: grid; + place-items: center; + width: 25px; + height: 25px; + border: 1px solid var(--line-strong); + border-radius: 50%; + color: var(--muted); + content: counter(step); + font: 0.65rem/1 var(--mono); + } + + .path-meta { + display: grid; + align-content: start; + gap: 18px; + padding: 28px; + background: var(--paper-deep); + } + + .path-meta div { + padding-bottom: 18px; + border-bottom: 1px solid var(--line); + } + + .path-meta span { + display: block; + margin-bottom: 7px; + color: var(--muted); + font: 0.62rem/1.4 var(--mono); + letter-spacing: 0.12em; + } + + .path-meta b { + font-size: 0.88rem; + font-weight: 550; + } + + .chapter-grid { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .chapter-card { + position: relative; + display: flex; + min-height: 350px; + flex-direction: column; + color: inherit; + text-decoration: none; + transition: background-color 160ms ease, transform 160ms ease; + } + + .chapter-card:hover { + z-index: 1; + background: var(--paper-raised); + transform: translateY(-3px); + } + + .chapter-card .chapter-top { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 38px; + } + + .chapter-number { + color: var(--copper); + font: 700 0.75rem/1 var(--mono); + } + + .status { + padding: 5px 8px; + border: 1px solid var(--line); + border-radius: 999px; + color: var(--muted); + font: 0.61rem/1 var(--mono); + } + + .status.published { + border-color: rgba(85, 122, 114, 0.35); + background: var(--sage-pale); + color: #385f57; + } + + .status.researching, + .status.drafting { + background: var(--sky-pale); + color: #496a83; + } + + .chapter-card h3 { + font-size: 1.45rem; + } + + .chapter-card > p { + margin-top: 16px; + color: var(--muted); + font-size: 0.88rem; + } + + .chapter-card .chapter-bottom { + display: grid; + gap: 10px; + margin-top: auto; + padding-top: 24px; + } + + .progress-track { + height: 3px; + overflow: hidden; + background: var(--paper-deep); + } + + .progress-track span { + display: block; + height: 100%; + background: var(--copper); + } + + .chapter-meta { + display: flex; + justify-content: space-between; + color: var(--muted-light); + font: 0.61rem/1 var(--mono); + } + + .page-hero { + padding: 82px 0 68px; + } + + .page-hero-inner { + position: relative; + display: grid; + grid-template-columns: minmax(0, 1fr) 320px; + gap: 70px; + align-items: end; + width: var(--page); + margin-inline: auto; + padding-inline: 40px; + } + + .page-hero h1 { + max-width: 1000px; + font-size: clamp(2.9rem, 6vw, 6.4rem); + } + + .page-hero .lead { + max-width: 760px; + margin-top: 26px; + color: #506077; + font-size: 1.14rem; + line-height: 1.9; + } + + .page-facts { + display: grid; + border-top: 1px solid var(--line); + } + + .page-facts div { + display: grid; + grid-template-columns: 100px 1fr; + gap: 16px; + padding: 14px 0; + border-bottom: 1px solid var(--line); + } + + .page-facts dt { + color: var(--muted); + font: 0.62rem/1.5 var(--mono); + letter-spacing: 0.1em; + text-transform: uppercase; + } + + .page-facts dd { + font-size: 0.84rem; + } + + .report-shell { + display: grid; + grid-template-columns: 240px minmax(0, 1fr); + gap: 60px; + width: var(--page); + margin-inline: auto; + padding: 68px 40px 110px; + } + + .side-rail { + position: sticky; + top: 106px; + align-self: start; + max-height: calc(100vh - 130px); + overflow: auto; + padding-right: 24px; + } + + .side-rail > p { + margin-bottom: 18px; + color: var(--muted); + font: 0.65rem/1 var(--mono); + letter-spacing: 0.16em; + } + + .side-rail ol { + display: grid; + gap: 2px; + margin: 0; + padding: 0; + list-style: none; + } + + .side-rail a { + display: grid; + grid-template-columns: 30px 1fr; + gap: 9px; + padding: 8px 0; + color: var(--muted); + font-size: 0.77rem; + line-height: 1.5; + text-decoration: none; + } + + .side-rail a:hover { + color: var(--ink); + } + + .side-rail a span { + color: var(--muted-light); + font-family: var(--mono); + font-size: 0.62rem; + } + + .rail-note { + margin-top: 26px; + padding: 18px; + border: 1px solid var(--line); + color: var(--muted); + font-size: 0.74rem; + } + + .rail-note b { + display: block; + margin-bottom: 7px; + color: var(--ink); + font-size: 0.72rem; + } + + .article { + min-width: 0; + max-width: 960px; + } + + .article-section { + padding: 32px 0 78px; + border-bottom: 1px solid var(--line); + scroll-margin-top: 92px; + } + + .article-section + .article-section { + padding-top: 78px; + } + + .article-section > .eyebrow { + margin-bottom: 17px; + } + + .article-section h2 { + max-width: 840px; + margin-bottom: 30px; + font-size: clamp(2.1rem, 4vw, 3.9rem); + } + + .article-section h3 { + margin: 46px 0 18px; + font-size: 1.55rem; + } + + .article-section h4 { + margin: 32px 0 14px; + font-size: 1.07rem; + letter-spacing: -0.01em; + } + + .article-section > p, + .article-copy p { + max-width: var(--reading); + margin-top: 18px; + color: #405168; + font-size: 1.02rem; + line-height: 1.95; + } + + .article-section strong { + color: var(--ink-strong); + } + + .article-section a:not(.button) { + color: #3f6684; + } + + .article-section ul, + .article-section ol { + display: grid; + max-width: var(--reading); + gap: 10px; + margin: 20px 0; + padding-left: 1.35rem; + color: #405168; + } + + .lede { + max-width: 860px !important; + color: var(--ink) !important; + font-family: var(--serif); + font-size: clamp(1.25rem, 1.8vw, 1.55rem) !important; + line-height: 1.75 !important; + } + + .plain-language, + .evidence-note, + .warning-note { + max-width: 840px; + margin: 34px 0; + padding: 24px 28px; + border-left: 3px solid var(--sky); + background: color-mix(in srgb, var(--sky-pale) 55%, transparent); + } + + .evidence-note { + border-left-color: var(--sage); + background: color-mix(in srgb, var(--sage-pale) 55%, transparent); + } + + .warning-note { + border-left-color: var(--copper); + background: color-mix(in srgb, var(--copper-pale) 50%, transparent); + } + + .plain-language b, + .evidence-note b, + .warning-note b { + display: block; + margin-bottom: 8px; + font: 700 0.67rem/1 var(--mono); + letter-spacing: 0.12em; + text-transform: uppercase; + } + + .plain-language p, + .evidence-note p, + .warning-note p { + color: #45556a; + font-size: 0.94rem; + line-height: 1.85; + } + + .formula { + max-width: 840px; + margin: 28px 0; + padding: 28px; + overflow-x: auto; + border: 1px solid var(--line); + background: var(--paper-raised); + color: var(--ink-strong); + font: 1rem/1.7 var(--mono); + text-align: center; + } + + .formula small { + display: block; + margin-top: 12px; + color: var(--muted); + font: 0.72rem/1.6 var(--text); + text-align: left; + } + + .concept-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + max-width: 900px; + margin: 34px 0; + border-top: 1px solid var(--line); + border-left: 1px solid var(--line); + } + + .concept-grid > article { + min-height: 190px; + padding: 24px; + border-right: 1px solid var(--line); + border-bottom: 1px solid var(--line); + } + + .concept-grid span { + color: var(--copper); + font: 0.68rem/1 var(--mono); + } + + .concept-grid h3 { + margin: 23px 0 12px; + font-size: 1.12rem; + } + + .concept-grid p { + color: var(--muted); + font-size: 0.82rem; + line-height: 1.75; + } + + .paper-chain { + display: grid; + max-width: 900px; + margin-top: 32px; + border-top: 1px solid var(--line); + } + + .paper-row { + display: grid; + grid-template-columns: 72px minmax(200px, 0.8fr) minmax(280px, 1.2fr); + gap: 22px; + padding: 22px 8px; + border-bottom: 1px solid var(--line); + text-decoration: none; + } + + .paper-row:hover { + background: color-mix(in srgb, var(--paper-raised) 65%, transparent); + } + + .paper-row time { + color: var(--copper); + font: 700 0.75rem/1.5 var(--mono); + } + + .paper-row b { + font-size: 0.93rem; + line-height: 1.5; + } + + .paper-row p { + color: var(--muted); + font-size: 0.8rem; + line-height: 1.65; + } + + .site-footer { + display: grid; + grid-template-columns: 1fr auto; + gap: 50px; + width: var(--page); + margin-inline: auto; + padding: 60px 40px 42px; + } + + .site-footer > div:first-child { + display: flex; + align-items: center; + gap: 18px; + } + + .site-footer > div:first-child p { + max-width: 480px; + color: var(--muted); + font-size: 0.8rem; + } + + .footer-links { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + gap: 22px; + } + + .footer-links a { + color: var(--muted); + font-size: 0.75rem; + text-decoration: none; + } + + .footer-legal { + grid-column: 1 / -1; + padding-top: 24px; + border-top: 1px solid var(--line); + color: var(--muted-light); + font: 0.62rem/1.6 var(--mono); + } +} + +@layer utilities { + .visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; + } + + .mono { + font-family: var(--mono); + } + + .muted { + color: var(--muted); + } +} + +@media (max-width: 1080px) { + :root { + --page: calc(100vw - 36px); + } + + .site-header { + grid-template-columns: 1fr auto; + padding-inline: 24px; + } + + .top-nav { + display: none; + } + + .menu-toggle { + display: inline-flex; + } + + .mobile-nav { + position: absolute; + top: 72px; + right: 18px; + left: 18px; + display: none; + grid-template-columns: repeat(2, minmax(0, 1fr)); + padding: 12px; + border: 1px solid var(--line); + background: var(--paper-raised); + box-shadow: 0 24px 70px rgba(39, 54, 74, 0.16); + } + + .mobile-nav[data-open] { + display: grid; + } + + .mobile-nav a { + padding: 13px; + color: var(--muted); + text-decoration: none; + } + + .hero-inner, + .page-hero-inner { + grid-template-columns: 1fr; + } + + .hero-inner { + gap: 56px; + min-height: auto; + } + + .hero-aside { + display: grid; + grid-template-columns: 1fr 1.5fr; + column-gap: 28px; + } + + .hero-stats { + grid-column: 2; + grid-row: 1 / span 3; + margin-top: 0; + } + + .feature-grid, + .method-grid, + .chapter-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .section-heading { + grid-template-columns: 1fr; + gap: 24px; + } + + .report-shell { + grid-template-columns: 1fr; + } + + .side-rail { + position: static; + display: none; + } +} + +@media (max-width: 720px) { + :root { + --page: calc(100vw - 20px); + } + + body { + font-size: 15px; + } + + .site-header { + min-height: 64px; + padding-inline: 14px; + } + + .wordmark-copy small, + .header-meta > span { + display: none; + } + + .wordmark-mark { + width: 38px; + } + + .mobile-nav { + top: 64px; + } + + .hero-inner, + .page-hero-inner, + .section, + .scope-strip, + .report-shell, + .site-footer { + padding-right: 18px; + padding-left: 18px; + } + + .hero-inner { + padding-top: 70px; + padding-bottom: 54px; + } + + .hero h1 { + font-size: clamp(3rem, 16vw, 5.1rem); + } + + .hero h1 em { + font-size: 0.36em; + line-height: 1.5; + } + + .hero-aside { + display: block; + } + + .hero-stats { + margin-top: 24px; + } + + .scope-strip { + grid-template-columns: 1fr; + gap: 8px; + } + + .section { + padding-block: 76px; + } + + .section-heading { + margin-bottom: 38px; + } + + .feature-grid, + .method-grid, + .chapter-grid, + .concept-grid { + grid-template-columns: 1fr; + } + + .thesis { + grid-template-columns: 1fr; + gap: 12px; + } + + .pathways { + grid-template-columns: 1fr; + gap: 22px; + } + + .path-tabs { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .path-tabs button { + border-right: 1px solid var(--line); + } + + .path-panel[data-active] { + grid-template-columns: 1fr; + } + + .page-hero { + padding-block: 60px 50px; + } + + .page-facts { + margin-top: 12px; + } + + .report-shell { + padding-block: 38px 80px; + } + + .article-section { + padding-bottom: 60px; + } + + .article-section + .article-section { + padding-top: 60px; + } + + .paper-row { + grid-template-columns: 52px 1fr; + } + + .paper-row p { + grid-column: 2; + } + + .site-footer { + grid-template-columns: 1fr; + } + + .footer-links { + justify-content: flex-start; + } +} + +@media (prefers-reduced-motion: reduce) { + html { + scroll-behavior: auto; + } + + *, + *::before, + *::after { + scroll-behavior: auto !important; + transition-duration: 0.01ms !important; + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..c5450d3 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "astro/tsconfigs/strict", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + } +}