diff --git a/README.md b/README.md
index cb7a48e7..553aa3cb 100644
--- a/README.md
+++ b/README.md
@@ -2,22 +2,159 @@
9Router is a local AI routing gateway with provider fallback and token-saving features.
-## Quick Start
+
-### Install
+## New Features
-#### Docker
+### Proxy Fitness
+
+Monitor proxy health and egress location to keep routed requests reliable.
+
+
+
+### Smart Rotation
+
+Automatically rotate proxy pools and provider connections for better availability.
+
+
+
+## Installation for Beginners
+
+The easiest installation method is Docker. Docker runs 9Router in a container, so you do not need to install Node.js, npm, or the application dependencies manually.
+
+### 1. Install Docker
+
+Install Docker Desktop on Windows or macOS, or install Docker Engine and Docker Compose on Linux:
+
+- [Docker Desktop](https://www.docker.com/products/docker-desktop/)
+- [Docker Engine for Linux](https://docs.docker.com/engine/install/)
+
+After installation, open a terminal and check that Docker is available:
+
+```bash
+docker --version
+docker compose version
+```
+
+Both commands should print a version number.
+
+### 2. Download the project
+
+Clone this repository, then enter its folder:
+
+```bash
+git clone https://github.com/mhiqrambg/9router-mibp-version.git
+cd 9router-mibp-version
+```
+
+If Git is not installed, download the repository as a ZIP file from GitHub and open the extracted folder in a terminal.
+
+### 3. Create the environment file
+
+Create `.env` from the example file:
```bash
cp .env.example .env
+```
+
+Open `.env` in a text editor and change at least these values:
+
+```env
+JWT_SECRET=replace-with-a-long-random-secret
+INITIAL_PASSWORD=replace-with-your-dashboard-password
+API_KEY_SECRET=replace-with-another-long-random-secret
+MACHINE_ID_SALT=replace-with-another-random-secret
+REQUIRE_API_KEY=true
+```
+
+Do not share `.env` or commit it to Git. It contains the dashboard password and security secrets. On Linux or macOS, you can generate random values with:
+
+```bash
+openssl rand -hex 32
+```
+
+Use a different generated value for each secret.
+
+### 4. Start 9Router
+
+Run this command in the project folder:
+
+```bash
docker compose up -d
```
-Dashboard: `http://localhost:20128/dashboard`
+The first run downloads the 9Router and Headroom images. The `-d` option keeps them running in the background.
-API endpoint: `http://localhost:20128/v1`
+Check the containers:
-#### From Source
+```bash
+docker compose ps
+```
+
+Both `9router` and `headroom` should have a running status.
+
+### 5. Open the dashboard
+
+Open this address in your browser:
+
+```text
+http://localhost:20128/dashboard
+```
+
+Log in with the `INITIAL_PASSWORD` value from `.env`.
+
+### 6. Create an API key
+
+In the dashboard, open **Endpoint & Key** and create a key. Keep the complete key that starts with `sk-`.
+
+Use it when calling the API:
+
+```bash
+curl http://localhost:20128/v1/models \
+ -H "Authorization: Bearer YOUR_API_KEY"
+```
+
+For a server exposed through a domain, replace the URL with your domain:
+
+```bash
+curl https://your-domain.example/v1/models \
+ -H "Authorization: Bearer YOUR_API_KEY"
+```
+
+Remote requests without a valid API key are rejected. The API key is stored in the application database, not in `.env`.
+
+### Useful Docker commands
+
+View live logs:
+
+```bash
+docker compose logs -f 9router
+```
+
+Restart the application:
+
+```bash
+docker compose restart 9router
+```
+
+Stop the services without deleting data:
+
+```bash
+docker compose down
+```
+
+Update to the latest image:
+
+```bash
+docker compose pull
+docker compose up -d
+```
+
+The Docker volume named `9router-data` keeps your settings, providers, and API keys when the container is recreated.
+
+### Install from source
+
+This option is intended for development. Install Node.js 22 or newer, then run:
```bash
cp .env.example .env
@@ -25,7 +162,7 @@ npm install
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
```
-Before starting, set at least `JWT_SECRET` and `INITIAL_PASSWORD` in `.env`.
+Open `http://localhost:20128/dashboard` after the development server starts.
### Update
diff --git a/README.zh-CN.md b/README.zh-CN.md
deleted file mode 100644
index 1b2bedd2..00000000
--- a/README.zh-CN.md
+++ /dev/null
@@ -1,1315 +0,0 @@
-
-
-
-
- # 9Router - 免费 AI 路由器与 Token 节省器
-
- **编程永不停歇。使用 RTK + 自动切换到免费/低价 AI 模型,节省 20-40% 的 tokens。**
-
- **将所有 AI 编程工具(Claude Code、Cursor、Antigravity、Copilot、Codex、Gemini、OpenCode、Cline、OpenClaw...)连接到 40+ AI 提供商和 100+ 模型。**
-
- [](https://www.npmjs.com/package/9router)
- [](https://www.npmjs.com/package/9router)
- [](https://github.com/decolua/9router/blob/main/LICENSE)
-
-
-
- [🚀 快速开始](#-快速开始) • [💡 功能特点](#-主要功能) • [📖 设置指南](#-设置指南) • [🌐 网站](https://9router.com)
-
- [🇻🇳 Tiếng Việt](./i18n/README.vi.md) • [🇨🇳 中文](./i18n/README.zh-CN.md) • [🇯🇵 日本語](./i18n/README.ja-JP.md)
-
-
----
-
-## 🤔 为什么选择 9Router?
-
-**告别浪费金钱、tokens 和触碰限制的困扰:**
-
-- ❌ 订阅配额每月到期却未使用
-- ❌ 速率限制在编程中途打断你
-- ❌ 工具输出(git diff、grep、ls...)快速消耗 tokens
-- ❌ 昂贵的 API(每个提供商 $20-50/月)
-- ❌ 需要手动在提供商之间切换
-
-**9Router 解决这一切:**
-
-- ✅ **RTK Token 节省器** - 自动压缩 tool_result 内容,每次请求节省 20-40% tokens
-- ✅ **充分利用订阅** - 追踪配额,在重置前用尽每一分额度
-- ✅ **自动切换** - 订阅 → 低价 → 免费,零停机时间
-- ✅ **多账户支持** - 按提供商在账户之间轮询
-- ✅ **通用兼容** - 支持 Claude Code、Codex、Cursor、Cline 以及任何 CLI 工具
-
----
-
-## 🔄 工作原理
-
-```
-┌─────────────┐
-│ 你的 CLI │ (Claude Code、Codex、OpenClaw、Cursor、Cline...)
-│ 工具 │
-└──────┬──────┘
- │ http://localhost:20128/v1
- ↓
-┌─────────────────────────────────────────────┐
-│ 9Router(智能路由器) │
-│ • RTK Token 节省器(减少 tool_result tokens)│
-│ • 格式转换(OpenAI ↔ Claude) │
-│ • 配额追踪 │
-│ • 自动刷新 token │
-└──────┬──────────────────────────────────────┘
- │
- ├─→ [第一层:订阅] Claude Code、Codex、GitHub Copilot
- │ ↓ 配额耗尽
- ├─→ [第二层:低价] GLM ($0.6/1M)、MiniMax ($0.2/1M)
- │ ↓ 预算超限
- └─→ [第三层:免费] Kiro、OpenCode Free、Vertex ($300 额度)
-
-结果:编程永不停歇,最小成本 + 通过 RTK 节省 20-40% tokens
-```
-
----
-
-## ⚡ 快速开始
-
-**1. 全局安装:**
-
-```bash
-npm install -g 9router
-9router
-```
-
-🎉 控制面板在 `http://localhost:20128` 打开
-
-**2. 连接免费提供商(无需注册):**
-
-控制面板 → 提供商 → 连接 **Kiro AI**(约 50 积分/月免费:Claude 4.5 + GLM-5 + MiniMax)或 **OpenCode Free**(无需认证)→ 完成!
-
-**3. 在 CLI 工具中使用:**
-
-```
-Claude Code/Codex/OpenClaw/Cursor/Cline 设置:
- Endpoint: http://localhost:20128/v1
- API Key: [从控制面板复制]
- Model: kr/claude-sonnet-4.5
-```
-
-**就这么简单!** 开始使用免费 AI 模型编程。
-
-**替代方案:从源码运行(本仓库):**
-
-本仓库的包是私有的(`9router-app`),所以源码/Docker 执行是预期的本地开发方式。
-
-```bash
-cp .env.example .env
-npm install
-PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
-```
-
-生产模式:
-
-```bash
-npm run build
-PORT=20128 HOSTNAME=0.0.0.0 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run start
-```
-
-默认 URL:
-- 控制面板:`http://localhost:20128/dashboard`
-- OpenAI 兼容 API:`http://localhost:20128/v1`
-
----
-
-## 视频教程
-
-
-
-> 🎬 **制作了关于 9Router 的视频?** 提交 [Pull Request](https://github.com/decolua/9router/pulls),将你的视频添加到此部分 — 我们会合并它!
-
----
-
-## 🛠️ 支持的 CLI 工具
-
-9Router 与所有主流 AI 编程工具无缝协作:
-
-
-
----
-
-## 🌐 支持的提供商
-
-### 🔐 OAuth 提供商
-
-
-
-### 🆓 免费提供商
-
-
-
-
-
-
- Kiro AI
- Claude 4.5 + GLM-5 + MiniMax 每月 50 积分免费
-
-
-
- OpenCode Free
- 无需认证 • 自动获取模型 免费(模型列表会变)
-
-
-
- Vertex AI
- Gemini 3 Pro + GLM-5 + DeepSeek $300 免费额度
-
-
-
-
-
-> **注意:** iFlow、Qwen Code 和 Gemini CLI 的免费等级已于 2026 年停止。请改用 Kiro / OpenCode Free / Vertex。
->
-> **Kiro AI** 于 2025 年 9 月转为付费模式 — 免费等级现在上限为**每月 50 积分**(新账户前 30 天另加 500 试用积分)。付费档位:Pro $20/月(1,000 积分)、Pro+ $40/月(2,000)、Pro Max $100/月(5,000)、Power $200/月(10,000)。
-> **OpenCode Free** 的模型列表会随时间变化(部分模型仅限时免费)— 可能随时变更,恕不另行通知。
-> **Vertex AI**:新 GCP 账户的 $300 免费额度仍然有效,但自 2026 年 3 月起 **Gemini API 端点不再消耗这些额度** — 请改用 **Vertex AI Studio** 端点。
-
-### 🔑 API Key 提供商(40+)
-
-
-
----
-
-## 💡 主要功能
-
-| 功能 | 作用 | 为什么重要 |
-|---------|--------------|----------------|
-| 🚀 **RTK Token 节省器**([RTK](https://github.com/rtk-ai/rtk) ⭐40K) | 压缩工具输出(`git diff`、`grep`、`ls`、`tree`...)后再发送给 LLM | 每次请求节省 **20-40% 输入 tokens** |
-| 🪨 **Caveman 模式**([Caveman](https://github.com/JuliusBrussee/caveman) ⭐52K) | 注入 caveman 风格提示词 → LLM 回复简洁,保留技术实质 | 节省 **高达 65% 输出 tokens** |
-| 🎯 **智能三层切换** | 自动路由:订阅 → 低价 → 免费 | 编程永不停歇,零停机时间 |
-| 📊 **实时配额追踪** | 实时 token 计数 + 重置倒计时 | 充分利用订阅价值 |
-| 🔄 **格式转换** | OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro ↔ Vertex | 兼容任何 CLI 工具 |
-| 👥 **多账户支持** | 每个提供商支持多个账户 | 负载均衡 + 冗余备份 |
-| 🔄 **自动 Token 刷新** | OAuth token 自动刷新 | 无需手动重新登录 |
-| 🎨 **自定义组合** | 创建无限模型组合 | 自定义适合你的切换策略 |
-| 📝 **请求日志** | 调试模式下的完整请求/响应日志 | 轻松排查问题 |
-| 💾 **云同步** | 跨设备同步配置 | 处处相同设置 |
-| 📊 **使用分析** | 追踪 tokens、成本、趋势 | 优化开支 |
-| 🌐 **任意部署** | 本地、VPS、Docker、Cloudflare Workers | 灵活部署选项 |
-
-
-📖 功能详情
-
-### 🚀 RTK Token 节省器
-
-工具输出(`git diff`、`grep`、`find`、`ls`、`tree`、日志转储...)通常占用 30-50% 的提示词预算。RTK 在请求到达 LLM 之前检测并应用智能、无损压缩:
-
-- **过滤器:** `git-diff`、`git-status`、`grep`、`find`、`ls`、`tree`、`dedup-log`、`smart-truncate`、`read-numbered`、`search-list`
-- **自动检测:** 无需配置 — RTK 检查每个 `tool_result` 的前 1KB,选择合适的过滤器。
-- **安全设计:** 如果过滤器失败、抛出异常或使输出变大,RTK 会静默保留原始文本。错误永远不会中断你的请求。
-- **通用兼容:** 适用于所有格式(OpenAI、Claude、Gemini、Cursor、Kiro、OpenAI Responses),因为它在任何格式转换**之前**运行。
-- **默认开启:** 可随时在控制面板 → 端点设置中切换。
-
-```
-不使用 RTK:47K tokens 发送给 LLM
-使用 RTK: 28K tokens 发送给 LLM (节省 40% · 相同上下文 · 相同答案)
-```
-
-### 🎯 智能三层切换
-
-创建具有自动切换功能的组合:
-
-```
-组合:"my-coding-stack"
- 1. cc/claude-opus-4-6 (你的订阅)
- 2. glm/glm-4.7 (低价备份,$0.6/1M)
- 3. if/kimi-k2-thinking (免费备选)
-
-→ 配额用完或出错时自动切换
-```
-
-### 📊 实时配额追踪
-
-- 每个提供商的 token 消耗
-- 重置倒计时(5小时、每日、每周)
-- 付费等级的成本估算
-- 月度支出报告
-
-### 🔄 格式转换
-
-格式间无缝转换:
-- **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **Cursor** ↔ **Kiro** ↔ **Vertex** ↔ **Antigravity** ↔ **Ollama** ↔ **OpenAI Responses**
-- 你的 CLI 工具发送 OpenAI 格式 → 9Router 转换 → 提供商接收原生格式
-- 适用于任何支持自定义 OpenAI 端点的工具
-
-### 👥 多账户支持
-
-- 每个提供商添加多个账户
-- 自动轮询或基于优先级的路由
-- 当一个账户达到配额时切换到下一个
-
-### 🔄 自动 Token 刷新
-
-- OAuth token 在过期前自动刷新
-- 无需手动重新认证
-- 所有提供商的无缝体验
-
-### 🎨 自定义组合
-
-- 创建无限模型组合
-- 混合订阅、低价和免费等级
-- 为组合命名以便访问
-- 使用云同步跨设备共享组合
-
-### 📝 请求日志
-
-- 启用调试模式获取完整请求/响应日志
-- 追踪 API 调用、请求头和载荷
-- 排查集成问题
-- 导出日志进行分析
-
-### 💾 云同步
-
-- 跨设备同步提供商、组合和设置
-- 自动后台同步
-- 安全加密存储
-- 从任何地方访问你的设置
-
-#### 云运行时说明
-
-- 生产环境中优先使用服务端云变量:
- - `BASE_URL`(云同步调度程序使用的内部回调 URL)
- - `CLOUD_URL`(云同步端点基础 URL)
-- `NEXT_PUBLIC_BASE_URL` 和 `NEXT_PUBLIC_CLOUD_URL` 仍用于兼容性/UI,但服务端运行时现在优先使用 `BASE_URL`/`CLOUD_URL`。
-- 云同步请求现在使用超时 + 快速失败行为,以避免云 DNS/网络不可用时 UI 挂起。
-
-### 📊 使用分析
-
-- 追踪每个提供商和模型的 token 使用量
-- 成本估算和支出趋势
-- 月度报告和洞察
-- 优化你的 AI 支出
-
-> **💡 重要 - 了解控制面板成本:**
->
-> 使用分析中显示的"成本"**仅用于追踪和比较目的**。
-> 9Router 本身**永远不会向你收费**。你只直接向提供商付款(如果使用付费服务)。
->
-> **示例:** 如果你的控制面板显示使用 Kiro 免费模型时"总成本 $290",这代表你如果直接使用付费 API 需要支付的金额。你的实际成本 = **$0**(Kiro 免费等级:约 50 积分/月)。
->
-> 把它想象成一个"节省追踪器",展示你通过使用免费模型或通过 9Router 路由节省了多少钱!
-
-### 🌐 任意部署
-
-- 💻 **本地** - 默认,离线可用
-- ☁️ **VPS/云** - 跨设备共享
-- 🐳 **Docker** - 一键部署
-- 🚀 **Cloudflare Workers** - 全球边缘网络
-
-
-
----
-
-## 💰 价格一览
-
-| 等级 | 提供商 | 成本 | 配额重置 | 适用场景 |
-|------|----------|------|-------------|----------|
-| **🚀 TOKEN 节省器** | **RTK(内置)** | **免费** | 始终开启 | **每次请求节省 20-40% tokens** |
-| **💳 订阅** | Claude Code (Pro/Max) | $20-200/月 | 5小时 + 每周 | 已有订阅的用户 |
-| | Codex (Plus/Pro) | $20-200/月 | 5小时 + 每周 | OpenAI 用户 |
-| | GitHub Copilot | $10-19/月 | 每月 | GitHub 用户 |
-| | Cursor IDE | $20/月 | 每月 | Cursor 用户 |
-| **💰 低价** | GLM-5.1 / GLM-4.7 | $0.6/1M | 每日 10AM | 预算备份 |
-| | MiniMax M2.7 | $0.2/1M | 5小时滚动 | 最便宜选项 |
-| | Kimi K2.5 | $9/月固定 | 10M tokens/月 | 可预测成本 |
- | **🆓 免费** | Kiro AI | $0 | 50 积分/月 | Claude 4.5 + GLM-5 + MiniMax 免费(之上为付费档位) |
- | | OpenCode Free | $0 | varies* | 无需认证,自动获取模型(列表会变化) |
- | | Vertex AI | $300 额度 | 新 GCP 账户 | Gemini 3 Pro + DeepSeek + GLM-5(使用 Vertex AI Studio 端点消耗免费额度) |
-
-**💡 专业提示:** RTK + Kiro AI + OpenCode Free 组合 = **$0 成本 + 节省 20-40% tokens**!
-
----
-
-### 📊 理解 9Router 成本与计费
-
-**9Router 计费真相:**
-
-✅ **9Router 软件 = 永久免费**(开源,绝不收费)
-✅ **控制面板"成本" = 仅用于显示/追踪**(不是实际账单)
-✅ **你直接向提供商付款**(订阅或 API 费用)
-✅ **免费提供商保持免费**(Kiro 约 50 积分/月、OpenCode Free、Vertex $300 额度 = 在免费额度内 $0)— 注意 iFlow/Qwen/Gemini CLI 免费等级已于 2026 年停止
-❌ **9Router 永不发送发票** 或扣款
-
-**成本显示如何工作:**
-
-控制面板显示**估算成本**,如同你直接使用付费 API。这**不是计费** — 它是一个比较工具,展示你的节省。
-
-**示例场景:**
-```
-控制面板显示:
-• 总请求数:1,662
-• 总 Tokens:47M
-• 显示成本:$290
-
-实际检查:
-• 提供商:Kiro(免费等级:约 50 积分/月)
-• 实际支付:$0.00
-• $290 意味着什么:通过使用免费模型节省的金额!
-```
-
-**付款规则:**
-- **订阅提供商**(Claude Code、Codex):通过他们的网站直接付款
-- **低价提供商**(GLM、MiniMax):直接付款,9Router 只做路由
-- **免费提供商**(Kiro、OpenCode Free、Vertex):真正的免费,在免费额度内无隐藏费用
-- **9Router**:从不收取任何费用,永远不会
-
----
-
-## 🎯 使用场景
-
-### 场景 1:"我有 Claude Pro 订阅"
-
-**问题:** 配额到期未用完,繁忙编码时遇到速率限制
-
-**解决方案:**
-```
-组合:"maximize-claude"
- 1. cc/claude-opus-4-7 (充分利用订阅)
- 2. glm/glm-5.1 (配额用完时的低价备份)
- 3. kr/claude-sonnet-4.5 (免费紧急备选)
-
-月成本:$20(订阅)+ ~$5(备份)= $25 总计
-对比:$20 + 遇到限制 = 沮丧
-```
-
-### 场景 2:"我想零成本"
-
-**问题:** 负担不起订阅,需要可靠的 AI 编码
-
-**解决方案:**
-```
-组合:"free-forever"
- 1. kr/claude-sonnet-4.5 (通过 Kiro 免费使用 Claude 4.5,约 50 积分/月)
- 2. kr/glm-5 (通过 Kiro 免费使用 GLM-5)
- 3. oc/ (OpenCode Free,无需认证)
-
-月成本:$0
-质量:生产级模型 + RTK 节省 20-40% tokens
-```
-
-### 场景 3:"我需要 24/7 编码,不中断"
-
-**问题:** 截止日期紧迫,不能承受停机
-
-**解决方案:**
-```
-组合:"always-on"
- 1. cc/claude-opus-4-7 (最佳质量)
- 2. cx/gpt-5.5 (第二个订阅)
- 3. glm/glm-5.1 (低价,每日重置)
- 4. minimax/MiniMax-M2.7 (最便宜,5小时重置)
- 5. kr/claude-sonnet-4.5 (通过 Kiro 免费使用,约 50 积分/月)
-
-结果:5 层切换 = 零停机时间
-月成本:$20-200(订阅)+ $10-20(备份)
-```
-
-### 场景 4:"我想在 OpenClaw 中使用免费 AI"
-
-**问题:** 需要在消息应用(WhatsApp、Telegram、Slack...)中使用 AI 助手,完全免费
-
-**解决方案:**
-```
-组合:"openclaw-free"
- 1. kr/claude-sonnet-4.5 (Claude 4.5 免费)
- 2. kr/glm-5 (GLM-5 免费)
- 3. kr/MiniMax-M2.5 (MiniMax 免费)
-
-月成本:$0
-访问方式:WhatsApp、Telegram、Slack、Discord、iMessage、Signal...
-```
-
----
-
-## ❓ 常见问题
-
-
-📊 为什么我的控制面板显示高成本?
-
-控制面板追踪你的 token 使用情况,并显示**估算成本**,如同你直接使用付费 API。这**不是实际计费** — 它是一个参考,展示你通过使用免费模型或通过 9Router 路由现有订阅节省了多少钱。
-
-**示例:**
-- **控制面板显示:** "$290 总成本"
-- **实际情况:** 你在使用 Kiro 免费模型(约 50 积分/月)
-- **你的实际成本:** **$0.00**
-- **$290 的含义:** 你通过使用免费模型而不是付费 API **节省**的金额!
-
-成本显示是一个"节省追踪器",帮助你了解使用模式和优化机会。
-
-
-
-
-💳 9Router 会扣我的钱吗?
-
-**不会。** 9Router 是在你自己的电脑上运行的开源软件。它永远不会向你收取任何费用。
-
-**你只需支付:**
-- ✅ **订阅提供商**(Claude Code $20/月、Codex $20-200/月)→ 在他们的网站上直接付款
-- ✅ **低价提供商**(GLM、MiniMax)→ 直接付款,9Router 只是路由你的请求
-- ❌ **9Router 本身** → **永不收费,永远不会**
-
-9Router 是一个本地代理/路由器。它没有你的信用卡,不能发送发票,也没有计费系统。它是完全免费的软件。
-
-
-
-
-🆓 免费提供商真的是无限量的吗?
-
-**基本上是!** 当前的免费提供商(Kiro、OpenCode Free、Vertex)是真正的免费,但免费等级有上限:
-
-这些是各公司提供的免费服务:
-- **Kiro AI**:通过 AWS Builder ID / Google / GitHub OAuth 使用,免费等级约**每月 50 积分**(新账户前 30 天另加 500 试用积分)。之上提供付费档位。
-- **OpenCode Free**:无认证直连代理,模型从 `opencode.ai/zen/v1/models` 自动获取。免费模型列表会随时间变化(部分模型仅限时免费)— 可能随时变更。
-- **Vertex AI**:新 Google Cloud 账户可获得 $300 免费额度(90 天)。自 2026 年 3 月起 Gemini API 端点不再消耗这些额度 — 请改用 **Vertex AI Studio** 端点。
-
-9Router 只是路由你的请求到它们 — 没有"陷阱"或未来的计费。它们是真正的免费服务,9Router 让它们易于使用并支持切换。
-
-**已停止的免费等级(不再推荐):**
-- ❌ **iFlow**:曾是免费无限量,现在改为付费(2026)
-- ❌ **Qwen Code**:阿里巴巴于 2026-04-15 完全停止免费 OAuth 等级
-- ❌ **Gemini CLI**:Google 已于 2026-06-18 完全停止服务(由闭源的 Antigravity CLI 取代)。已停止 — 请勿使用。
-
-
-
-
-💰 如何最小化我的实际 AI 成本?
-
-**免费优先策略:**
-
-1. **从 100% 免费组合开始:**
- ```
- 1. kr/glm-5 (通过 Kiro 免费使用 GLM-5,约 50 积分/月)
- 2. OpenCode Free 模型(无认证,自动获取)
- 3. Vertex AI Gemini 3 Pro(使用 Vertex AI Studio 端点 + $300 额度)
- ```
- **成本:$0/月**(在 Kiro 免费积分上限内;OpenCode/Vertex 受各自免费等级限制)
-
-2. **仅在需要时添加低价备份:**
- ```
- 4. glm/glm-4.7 ($0.6/1M tokens)
- ```
- **额外成本:只为实际使用的部分付费**
-
-3. **最后使用订阅提供商:**
- - 仅当你已有订阅时
- - 9Router 通过配额追踪帮助最大化其价值
-
-**结果:** 大多数用户可以仅使用免费等级以 $0/月运行!
-
-
-
-
-📈 如果我的使用量突然激增怎么办?
-
-9Router 的智能切换可以防止意外费用:
-
-**场景:** 你正在进行编码冲刺,用尽了配额
-
-**没有 9Router:**
-- ❌ 达到速率限制 → 工作停止 → 沮丧
-- ❌ 或者:不慎累积大量 API 账单
-
-**有 9Router:**
-- ✅ 订阅达到限制 → 自动切换到低价等级
-- ✅ 低价等级变得昂贵 → 自动切换到免费等级
-- ✅ 编程永不停歇 → 可预测的成本
-
-**你掌控一切:** 在控制面板中设置每个提供商的支出限制,9Router 会遵守它们。
-
-
-
----
-
-## 📖 设置指南
-
-
-🔐 订阅提供商(充分利用价值)
-
-### Claude Code (Pro/Max)
-
-```bash
-控制面板 → 提供商 → 连接 Claude Code
-→ OAuth 登录 → 自动 token 刷新
-→ 5小时 + 每周配额追踪
-
-模型:
- cc/claude-opus-4-7
- cc/claude-opus-4-6
- cc/claude-sonnet-4-6
- cc/claude-haiku-4-5-20251001
-```
-
-**专业提示:** 复杂任务使用 Opus,追求速度使用 Sonnet。9Router 按模型追踪配额!
-
-### OpenAI Codex (Plus/Pro)
-
-```bash
-控制面板 → 提供商 → 连接 Codex
-→ OAuth 登录(端口 1455)
-→ 5小时 + 每周重置
-
-模型:
- cx/gpt-5.5
- cx/gpt-5.4
- cx/gpt-5.3-codex
- cx/gpt-5.2-codex
-```
-
-### GitHub Copilot
-
-```bash
-控制面板 → 提供商 → 连接 GitHub
-→ 通过 GitHub 进行 OAuth
-→ 每月重置(每月 1 日)
-
-模型:
- gh/gpt-5.4
- gh/claude-opus-4.7
- gh/claude-sonnet-4.6
- gh/gemini-3.1-pro-preview
- gh/grok-code-fast-1
-```
-
-### Cursor IDE
-
-```bash
-控制面板 → 提供商 → 连接 Cursor
-→ OAuth 登录
-→ 每月订阅
-
-模型:
- cu/claude-4.6-opus-max
- cu/claude-4.5-sonnet-thinking
- cu/gpt-5.3-codex
-```
-
-
-
-
-💰 低价提供商(备份)
-
-### GLM-5.1 / GLM-4.7(每日重置,$0.6/1M)
-
-1. 注册:[Zhipu AI](https://open.bigmodel.cn/)
-2. 从编程计划获取 API key
-3. 控制面板 → 添加 API Key:
- - 提供商:`glm`
- - API Key:`your-key`
-
-**使用:** `glm/glm-5.1`、`glm/glm-5`、`glm/glm-4.7`
-
-**专业提示:** 编程计划提供 3 倍配额,成本仅为 1/7!每日 10:00 AM 重置。
-
-### MiniMax M2.7(5小时重置,$0.20/1M)
-
-1. 注册:[MiniMax](https://www.minimax.io/)
-2. 获取 API key
-3. 控制面板 → 添加 API Key
-
-**使用:** `minimax/MiniMax-M2.7`、`minimax/MiniMax-M2.5`
-
-**专业提示:** 长上下文(1M tokens)的最便宜选项!
-
-### Kimi K2.5($9/月固定)
-
-1. 订阅:[Moonshot AI](https://platform.moonshot.ai/)
-2. 获取 API key
-3. 控制面板 → 添加 API Key
-
-**使用:** `kimi/kimi-k2.5`、`kimi/kimi-k2.5-thinking`
-
-**专业提示:** 每月 $9 固定费用获得 10M tokens = 实际成本 $0.90/1M!
-
-
-
-
-🆓 免费提供商(推荐)
-
-### Kiro AI(Claude 4.5 + GLM-5 + MiniMax 免费)
-
-```bash
-控制面板 → 连接 Kiro
-→ AWS Builder ID、AWS IAM Identity Center、Google 或 GitHub
-→ 无限量使用
-
-模型:
- kr/claude-sonnet-4.5
- kr/claude-haiku-4.5
- kr/glm-5
- kr/MiniMax-M2.5
- kr/qwen3-coder-next
- kr/deepseek-3.2
-```
-
-**专业提示:** Claude 最佳免费选项。无需 API key,无需付款,完全无限量。
-
-### OpenCode Free(无需认证,自动获取模型)
-
-```bash
-控制面板 → 连接 OpenCode Free
-→ 无需登录(直连代理)
-→ 模型从 opencode.ai/zen/v1/models 自动获取
-```
-
-**专业提示:** 最快的设置。连接后即可开始编码。
-
-### Vertex AI(新 GCP 账户 $300 免费额度)
-
-```bash
-控制面板 → 连接 Vertex AI
-→ 上传 Google Cloud 服务账户 JSON
-→ 在你的 GCP 项目中启用 Vertex AI API
-
-模型:
- vertex/gemini-3.1-pro-preview
- vertex/gemini-3-flash-preview
- vertex/gemini-2.5-flash
-
-Vertex 合作伙伴(通过 Vertex 提供 Anthropic / DeepSeek / GLM / Qwen):
- vertex-partner/glm-5-maas
- vertex-partner/deepseek-v3.2-maas
- vertex-partner/qwen3-next-80b-a3b-thinking-maas
-```
-
-**专业提示:** 新 Google Cloud 账户可获得 90 天内 $300 免费额度。足够日常编码使用。
-
-
-
-
-🎨 创建组合
-
-### 示例 1:充分利用订阅 → 低价备份
-
-```
-控制面板 → 组合 → 创建新组合
-
-名称:premium-coding
-模型:
- 1. cc/claude-opus-4-7 (订阅主用)
- 2. glm/glm-5.1 (低价备份,$0.6/1M)
- 3. minimax/MiniMax-M2.7 (最便宜的备选,$0.20/1M)
-
-在 CLI 中使用:premium-coding
-
-月度成本示例(100M tokens):
- 80M 通过 Claude(订阅):$0 额外费用
- 15M 通过 GLM:$9
- 5M 通过 MiniMax:$1
- 总计:$10 + 你的订阅费用
-```
-
-### 示例 2:仅免费(零成本)
-
-```
-名称:free-combo
-模型:
- 1. kr/claude-sonnet-4.5 (通过 Kiro 免费使用 Claude 4.5,约 50 积分/月)
- 2. kr/glm-5 (通过 Kiro 免费使用 GLM-5)
- 3. vertex/gemini-3.1-pro-preview ($300 免费额度)
-
-成本:通过 RTK 永久 $0(+ 节省 20-40% tokens)!
-```
-
-
-
-
-🔧 CLI 集成
-
-### Cursor IDE
-
-```
-设置 → 模型 → 高级:
- OpenAI API Base URL:http://localhost:20128/v1
- OpenAI API Key:[来自 9router 控制面板]
- Model:cc/claude-opus-4-7
-```
-
-或使用组合:`premium-coding`
-
-### Claude Code
-
-编辑 `~/.claude/config.json`:
-
-```json
-{
- "anthropic_api_base": "http://localhost:20128/v1",
- "anthropic_api_key": "your-9router-api-key"
-}
-```
-
-### Codex CLI
-
-```bash
-export OPENAI_BASE_URL="http://localhost:20128"
-export OPENAI_API_KEY="your-9router-api-key"
-
-codex "your prompt"
-```
-
-### OpenClaw
-
-**选项 1 — 控制面板(推荐):**
-
-```
-控制面板 → CLI 工具 → OpenClaw → 选择模型 → 应用
-```
-
-**选项 2 — 手动:** 编辑 `~/.openclaw/openclaw.json`:
-
-```json
-{
- "agents": {
- "defaults": {
- "model": {
- "primary": "9router/kr/claude-sonnet-4.5"
- }
- }
- },
- "models": {
- "providers": {
- "9router": {
- "baseUrl": "http://127.0.0.1:20128/v1",
- "apiKey": "sk_9router",
- "api": "openai-completions",
- "models": [
- {
- "id": "kr/claude-sonnet-4.5",
- "name": "Claude Sonnet 4.5 (Kiro Free)"
- }
- ]
- }
- }
- }
-}
-```
-
-> **注意:** OpenClaw 仅适用于本地 9Router。使用 `127.0.0.1` 而不是 `localhost` 以避免 IPv6 解析问题。
-
-### Cline / Continue / RooCode
-
-```
-Provider:OpenAI 兼容
-Base URL:http://localhost:20128/v1
-API Key:[来自控制面板]
-Model:cc/claude-opus-4-7
-```
-
-
-
-
-🚀 部署
-
-### VPS 部署
-
-```bash
-# 克隆并安装
-git clone https://github.com/decolua/9router.git
-cd 9router
-npm install
-npm run build
-
-# 配置
-export JWT_SECRET="your-secure-secret-change-this"
-export INITIAL_PASSWORD="your-password"
-export DATA_DIR="/var/lib/9router"
-export PORT="20128"
-export HOSTNAME="0.0.0.0"
-export NODE_ENV="production"
-export NEXT_PUBLIC_BASE_URL="http://localhost:20128"
-export NEXT_PUBLIC_CLOUD_URL="https://9router.com"
-export API_KEY_SECRET="endpoint-proxy-api-key-secret"
-export MACHINE_ID_SALT="endpoint-proxy-salt"
-
-# 启动
-npm run start
-
-# 或使用 PM2
-npm install -g pm2
-pm2 start npm --name 9router -- start
-pm2 save
-pm2 startup
-```
-
-### Docker
-
-```bash
-# 构建镜像(从仓库根目录)
-docker build -t 9router .
-
-# 运行容器(当前设置使用的命令)
-docker run -d \
- --name 9router \
- -p 20128:20128 \
- --env-file /root/dev/9router/.env \
- -v 9router-data:/app/data \
- -v 9router-usage:/root/.9router \
- 9router
-```
-
-便携命令(如果你已经在仓库根目录):
-
-```bash
-docker run -d \
- --name 9router \
- -p 20128:20128 \
- --env-file ./.env \
- -v 9router-data:/app/data \
- -v 9router-usage:/root/.9router \
- 9router
-```
-
-容器默认值:
-- `PORT=20128`
-- `HOSTNAME=0.0.0.0`
-
-常用命令:
-
-```bash
-docker logs -f 9router
-docker restart 9router
-docker stop 9router && docker rm 9router
-```
-
-### 环境变量
-
-| 变量 | 默认值 | 描述 |
-|----------|---------|-------------|
-| `JWT_SECRET` | 自动生成(`~/.9router/jwt-secret`) | 用于控制面板 auth cookie 的 JWT 签名密钥(设置可在多实例间共享) |
-| `INITIAL_PASSWORD` | `123456` | 当没有保存的哈希时首次登录的密码 |
-| `DATA_DIR` | `~/.9router` | 主应用数据库位置(`db.json`) |
-| `PORT` | 框架默认值 | 服务端口(示例中为 `20128`) |
-| `HOSTNAME` | 框架默认值 | 绑定主机(Docker 默认为 `0.0.0.0`) |
-| `NODE_ENV` | 运行时默认值 | 设置 `production` 用于部署 |
-| `BASE_URL` | `http://localhost:20128` | 云同步任务使用的服务端内部基础 URL |
-| `CLOUD_URL` | `https://9router.com` | 服务端云同步端点基础 URL |
-| `NEXT_PUBLIC_BASE_URL` | `http://localhost:3000` | 向后兼容/公开基础 URL(服务端运行时优先使用 `BASE_URL`) |
-| `NEXT_PUBLIC_CLOUD_URL` | `https://9router.com` | 向后兼容/公开云 URL(服务端运行时优先使用 `CLOUD_URL`) |
-| `API_KEY_SECRET` | `endpoint-proxy-api-key-secret` | 生成 API key 的 HMAC 密钥 |
-| `MACHINE_ID_SALT` | `endpoint-proxy-salt` | 稳定机器 ID 哈希的盐值 |
-| `ENABLE_REQUEST_LOGS` | `false` | 在 `logs/` 下启用请求/响应日志 |
-| `AUTH_COOKIE_SECURE` | `false` | 强制 `Secure` auth cookie(在 HTTPS 反向代理后面设置为 `true`) |
-| `REQUIRE_API_KEY` | `false` | 在 `/v1/*` 路由上强制使用 Bearer API key(面向互联网部署时推荐) |
-| `HTTP_PROXY`、`HTTPS_PROXY`、`ALL_PROXY`、`NO_PROXY` | 空 | 用于上游提供商调用的可选出站代理 |
-
-注意:
-- 也支持小写代理变量:`http_proxy`、`https_proxy`、`all_proxy`、`no_proxy`。
-- `.env` 不会打包到 Docker 镜像中(`.dockerignore`);使用 `--env-file` 或 `-e` 注入运行时配置。
-- 在 Windows 上,`APPDATA` 可用于本地存储路径解析。
-- `INSTANCE_NAME` 出现在较旧的文档/环境变量模板中,但当前运行时未使用。
-
-### 运行时文件和存储
-
-- 主应用状态:`${DATA_DIR}/db.json`(提供商、组合、别名、密钥、设置),由 `src/lib/localDb.js` 管理。
-- 使用历史和日志:`${DATA_DIR}/usage.json` 和 `${DATA_DIR}/log.txt`,由 `src/lib/usageDb.js` 管理。
-- 可选的请求/翻译器日志:`ENABLE_REQUEST_LOGS=true` 时位于 `/logs/...`。
-- `${DATA_DIR}` 和 `~/.9router` 在 Docker 容器中解析到同一位置 — 符号链接 `/root/.9router -> /app/data` 在构建时创建。
-
-
-
----
-
-## 📊 可用模型
-
-
-查看所有可用模型
-
-**Claude Code(`cc/`)** - Pro/Max:
-- `cc/claude-opus-4-7`
-- `cc/claude-opus-4-6`
-- `cc/claude-sonnet-4-6`
-- `cc/claude-sonnet-4-5-20250929`
-- `cc/claude-haiku-4-5-20251001`
-
-**Codex(`cx/`)** - Plus/Pro:
-- `cx/gpt-5.5`
-- `cx/gpt-5.4`
-- `cx/gpt-5.3-codex`
-- `cx/gpt-5.2-codex`
-- `cx/gpt-5.1-codex-max`
-
-**GitHub Copilot(`gh/`)**:
-- `gh/gpt-5.4`
-- `gh/claude-opus-4.7`
-- `gh/claude-sonnet-4.6`
-- `gh/gemini-3.1-pro-preview`
-- `gh/grok-code-fast-1`
-
-**Cursor(`cu/`)** - 订阅:
-- `cu/claude-4.6-opus-max`
-- `cu/claude-4.5-sonnet-thinking`
-- `cu/gpt-5.3-codex`
-- `cu/kimi-k2.5`
-
-**GLM(`glm/`)** - $0.6/1M:
-- `glm/glm-5.1`
-- `glm/glm-5`
-- `glm/glm-4.7`
-
-**MiniMax(`minimax/`)** - $0.2/1M:
-- `minimax/MiniMax-M2.7`
-- `minimax/MiniMax-M2.5`
-
-**Kimi(`kimi/`)** - $9/月固定:
-- `kimi/kimi-k2.5`
-- `kimi/kimi-k2.5-thinking`
-
-**Kiro(`kr/`)** - 免费(约 50 积分/月,之上为付费档位):
-- `kr/claude-sonnet-4.5`
-- `kr/claude-haiku-4.5`
-- `kr/glm-5`
-- `kr/MiniMax-M2.5`
-- `kr/qwen3-coder-next`
-- `kr/deepseek-3.2`
-
-**OpenCode Free(`oc/`)** - 免费无需认证:
-- 从 `opencode.ai/zen/v1/models` 自动获取
-
-**Vertex AI(`vertex/`)** - $300 免费额度:
-- `vertex/gemini-3.1-pro-preview`
-- `vertex/gemini-3-flash-preview`
-- `vertex/gemini-2.5-flash`
-- `vertex-partner/glm-5-maas`
-- `vertex-partner/deepseek-v3.2-maas`
-
-
-
----
-
-## 🐛 故障排除
-
-**"语言模型未提供消息"**
-- 提供商配额耗尽 → 检查控制面板配额追踪器
-- 解决方案:使用组合切换或切换到更便宜的等级
-
-**速率限制**
-- 订阅配额用完 → 切换到 GLM/MiniMax
-- 添加组合:`cc/claude-opus-4-7 → glm/glm-5.1 → kr/claude-sonnet-4.5`
-
-**OAuth token 已过期**
-- 9Router 自动刷新
-- 如果问题持续:控制面板 → 提供商 → 重新连接
-
-**高成本**
-- 在控制面板 → 端点设置中启用 RTK(默认开启,节省 20-40% tokens)
-- 在控制面板中检查使用统计
-- 将主模型切换到 GLM/MiniMax
-- 对于非关键任务使用免费等级(Kiro、OpenCode Free、Vertex)
-
-**控制面板在错误端口打开**
-- 设置 `PORT=20128` 和 `NEXT_PUBLIC_BASE_URL=http://localhost:20128`
-
-**首次登录不工作**
-- 检查 `.env` 中的 `INITIAL_PASSWORD`
-- 如果未设置,回退密码是 `123456`
-
-**`logs/` 下没有请求日志**
-- 设置 `ENABLE_REQUEST_LOGS=true`
-
----
-
-## 🛠️ 技术栈
-
-- **运行时**:Node.js 20+
-- **框架**:Next.js 16
-- **UI**:React 19 + Tailwind CSS 4
-- **数据库**:LowDB(基于 JSON 文件)
-- **流式传输**:Server-Sent Events (SSE)
-- **认证**:OAuth 2.0 (PKCE) + JWT + API Keys
-
----
-
-## 📝 API 参考
-
-### 聊天补全
-
-```bash
-POST http://localhost:20128/v1/chat/completions
-Authorization: Bearer your-api-key
-Content-Type: application/json
-
-{
- "model": "cc/claude-opus-4-6",
- "messages": [
- {"role": "user", "content": "Write a function to..."}
- ],
- "stream": true
-}
-```
-
-### 列出模型
-
-```bash
-GET http://localhost:20128/v1/models
-Authorization: Bearer your-api-key
-
-→ 以 OpenAI 格式返回所有模型和组合
-```
-
-## 📧 支持
-
-- **网站**:[9router.com](https://9router.com)
-- **GitHub**:[github.com/decolua/9router](https://github.com/decolua/9router)
-- **问题**:[github.com/decolua/9router/issues](https://github.com/decolua/9router/issues)
-
----
-
-## 👥 贡献者
-
-感谢所有帮助改进 9Router 的贡献者!
-
-[](https://github.com/decolua/9router/graphs/contributors)
-
----
-
-## 📊 Star 图表
-
-[](https://starchart.cc/decolua/9router)
-
-
-
-## 🔀 分支
-
-**[OmniRoute](https://github.com/diegosouzapw/OmniRoute)** — 9Router 的全功能 TypeScript 分支。增加了 36+ 提供商、4 层自动切换、多模态 API(图像、嵌入、音频、TTS)、断路器、语义缓存、LLM 评估和精美的控制面板。368+ 单元测试。可通过 npm 和 Docker 使用。
-
----
-
-## 🙏 致谢
-
-站在巨人的肩膀上构建:
-
-- **CLIProxyAPI** — 启发了这个 JavaScript 移植的原始 Go 实现。
-- **[RTK](https://github.com/rtk-ai/rtk)**  — Rust token 节省器。9Router 将其压缩管道移植到 JS → 每次请求 **减少 20-40% 输入 tokens**。
-- **[Caveman](https://github.com/JuliusBrussee/caveman)**  by **[@JuliusBrussee](https://github.com/JuliusBrussee)** — 病毒式传播的 *"为什么用很多 token 当少的 token 就能搞定"*。9Router 适配其提示词 → **减少 65% 输出 tokens**。
-
-非常感谢这些作者 — 没有他们的工作,9Router 的 token 节省功能就不会存在。在 GitHub 上给他们加星!
-
----
-
-## 📄 许可证
-
-MIT 许可证 — 详见 [LICENSE](LICENSE)。
-
----
-
-
- 用 ❤️ 为 24/7 编程的开发者构建
-
\ No newline at end of file
diff --git a/images/9router.png b/images/9router.png
index 283210a2..7b0a56cd 100644
Binary files a/images/9router.png and b/images/9router.png differ
diff --git a/images/fusion-combo-ui.png b/images/fusion-combo-ui.png
deleted file mode 100644
index 8799d720..00000000
Binary files a/images/fusion-combo-ui.png and /dev/null differ
diff --git a/images/proxy-fitnes.png b/images/proxy-fitnes.png
new file mode 100644
index 00000000..c4487271
Binary files /dev/null and b/images/proxy-fitnes.png differ
diff --git a/images/smart-rotation.png b/images/smart-rotation.png
new file mode 100644
index 00000000..cbf8de0f
Binary files /dev/null and b/images/smart-rotation.png differ
diff --git a/src/app/(dashboard)/dashboard/profile/page.js b/src/app/(dashboard)/dashboard/profile/page.js
index 6e1df0af..806b85ac 100644
--- a/src/app/(dashboard)/dashboard/profile/page.js
+++ b/src/app/(dashboard)/dashboard/profile/page.js
@@ -1167,6 +1167,14 @@ export default function ProfilePage() {
{APP_CONFIG.name} v{APP_CONFIG.version}
Local Mode - All data stored on your machine
+
+ MIBP Edition
+
diff --git a/src/shared/components/Header.js b/src/shared/components/Header.js
index c3bbe606..dd000468 100644
--- a/src/shared/components/Header.js
+++ b/src/shared/components/Header.js
@@ -8,7 +8,6 @@ import ProviderIcon from "@/shared/components/ProviderIcon";
import HeaderMenu from "@/shared/components/HeaderMenu";
import HeaderLanguage from "@/shared/components/HeaderLanguage";
import ThemeToggle from "@/shared/components/ThemeToggle";
-import DonateModal from "@/shared/components/DonateModal";
import { useHeaderSearchStore } from "@/store/headerSearchStore";
import { OAUTH_PROVIDERS, APIKEY_PROVIDERS } from "@/shared/constants/config";
import { MEDIA_PROVIDER_KINDS, AI_PROVIDERS } from "@/shared/constants/providers";
@@ -183,7 +182,6 @@ export default function Header({ onMenuClick, showMenuButton = true }) {
const pathname = usePathname();
const [displayName, setDisplayName] = useState("");
const [loginMethod, setLoginMethod] = useState("");
- const [donateOpen, setDonateOpen] = useState(false);
// Memoize page info to prevent unnecessary recalculations
const pageInfo = useMemo(() => getPageInfo(pathname), [pathname]);
@@ -313,19 +311,20 @@ export default function Header({ onMenuClick, showMenuButton = true }) {
)}
- setDonateOpen(true)}
- className="flex items-center gap-1.5 px-3 h-8 rounded-lg border border-pink-500/30 bg-pink-500/10 text-pink-600 dark:text-pink-400 hover:bg-pink-500/20 transition-colors text-sm font-medium"
- aria-label="Donate"
+
- volunteer_activism
- Donate
-
+ code
+ MIBP Edition
+
- setDonateOpen(false)} />
);
}
diff --git a/src/shared/components/Sidebar.js b/src/shared/components/Sidebar.js
index 2f329da2..fa52dc2c 100644
--- a/src/shared/components/Sidebar.js
+++ b/src/shared/components/Sidebar.js
@@ -347,6 +347,17 @@ export default function Sidebar({ onClose }) {
+
+
{/* Remote Promo Modal */}