From c73dc556ea240f4d247453ec24f1c0f149a70f7b Mon Sep 17 00:00:00 2001 From: arch3rPro Date: Mon, 18 May 2026 12:59:37 +0800 Subject: [PATCH] feat(apps): add 9router application package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增9Router应用,包含多版本部署配置、应用元数据和中英文说明文档,提供AI路由和Token节省功能,支持40+AI提供商与100+模型。 --- apps/9router/README.md | 40 ++++++++++++++++++++++++ apps/9router/README_en.md | 40 ++++++++++++++++++++++++ apps/9router/data.yml | 29 +++++++++++++++++ apps/9router/latest/data.yml | 24 ++++++++++++++ apps/9router/latest/docker-compose.yml | 21 +++++++++++++ apps/9router/logo.png | Bin 0 -> 19788 bytes apps/9router/v0.4.18/data.yml | 24 ++++++++++++++ apps/9router/v0.4.18/docker-compose.yml | 21 +++++++++++++ 8 files changed, 199 insertions(+) create mode 100644 apps/9router/README.md create mode 100644 apps/9router/README_en.md create mode 100644 apps/9router/data.yml create mode 100644 apps/9router/latest/data.yml create mode 100644 apps/9router/latest/docker-compose.yml create mode 100644 apps/9router/logo.png create mode 100644 apps/9router/v0.4.18/data.yml create mode 100644 apps/9router/v0.4.18/docker-compose.yml diff --git a/apps/9router/README.md b/apps/9router/README.md new file mode 100644 index 0000000..730dd67 --- /dev/null +++ b/apps/9router/README.md @@ -0,0 +1,40 @@ +# 9Router + +免费 AI 路由器和 Token 节省工具。连接 40+ AI 提供商和 100+ 模型,支持 Claude Code、Cursor、Codex、Copilot、Cline 等 AI 编码工具。 + +## 功能特点 + +- RTK Token 节省 - 自动压缩工具输出内容,每次请求节省 20-40% token +- 智能 3 层降级 - 自动路由:订阅 → 廉价 → 免费模型,零停机 +- 实时配额跟踪 - 实时 token 计数和重置倒计时 +- 多账户支持 - 每个提供商支持多个账户,负载均衡 +- 格式转换 - OpenAI ↔ Claude ↔ Gemini 格式互相转换 +- 支持 40+ 提供商和 100+ 模型 + +## 使用说明 + +### 默认端口 + +- Web 界面: 20128 + +### 访问地址 + +- Dashboard: http://localhost:20128/dashboard +- OpenAI 兼容 API: http://localhost:20128/v1 + +### 数据目录 + +应用数据存储在 `./data` 目录,包含 SQLite 数据库和自动备份。 + +### 环境变量 + +- `DATA_DIR` - 数据目录路径(容器内固定为 /app/data) +- `PORT` - 服务端口(默认 20128) +- `HOSTNAME` - 监听地址(默认 0.0.0.0) +- `DEBUG` - 调试模式(可选,设为 true 启用) + +## 相关链接 + +- 官方网站: https://9router.com +- GitHub: https://github.com/decolua/9router +- 文档: https://github.com/decolua/9router/blob/master/README.md diff --git a/apps/9router/README_en.md b/apps/9router/README_en.md new file mode 100644 index 0000000..60711e6 --- /dev/null +++ b/apps/9router/README_en.md @@ -0,0 +1,40 @@ +# 9Router + +FREE AI Router & Token Saver. Connect to 40+ AI providers and 100+ models, works with Claude Code, Cursor, Codex, Copilot, Cline and more AI coding tools. + +## Features + +- RTK Token Saver - Auto-compress tool outputs, save 20-40% tokens per request +- Smart 3-Tier Fallback - Auto-route: Subscription → Cheap → Free, zero downtime +- Real-Time Quota Tracking - Live token count and reset countdown +- Multi-Account Support - Multiple accounts per provider for load balancing +- Format Translation - OpenAI ↔ Claude ↔ Gemini format conversion +- Support 40+ providers and 100+ models + +## Usage + +### Default Port + +- Web UI: 20128 + +### URLs + +- Dashboard: http://localhost:20128/dashboard +- OpenAI-compatible API: http://localhost:20128/v1 + +### Data Directory + +Application data is stored in the `./data` directory, including SQLite database and automatic backups. + +### Environment Variables + +- `DATA_DIR` - Data directory path (fixed to /app/data in container) +- `PORT` - Service port (default 20128) +- `HOSTNAME` - Listen address (default 0.0.0.0) +- `DEBUG` - Debug mode (optional, set to true to enable) + +## Links + +- Website: https://9router.com +- GitHub: https://github.com/decolua/9router +- Documentation: https://github.com/decolua/9router/blob/master/README.md diff --git a/apps/9router/data.yml b/apps/9router/data.yml new file mode 100644 index 0000000..47c4479 --- /dev/null +++ b/apps/9router/data.yml @@ -0,0 +1,29 @@ +name: 9Router +tags: + - 开发工具 + - AI + - API网关 +title: 免费 AI 路由器和 Token 节省工具 +description: 免费 AI 路由器和 Token 节省工具 +additionalProperties: + key: 9router + name: 9Router + tags: + - DevTool + - AI + - APIGateway + shortDescZh: 免费 AI 路由器和 Token 节省工具 + shortDescEn: FREE AI Router & Token Saver + description: + en: 9Router is a free AI router that provides unified access to 40+ AI providers and 100+ models. Features RTK token saver (20-40% token savings), auto fallback from subscription to cheap to free models, quota tracking, and multi-account support. Works with Claude Code, Cursor, Codex, Copilot, Cline, and more. + zh: 9Router 是一个免费的 AI 路由器,提供对 40+ AI 提供商和 100+ 模型的统一访问。具有 RTK Token 节省功能(节省 20-40% 的 token),从订阅到廉价再到免费模型的自动降级,配额跟踪和多账户支持。兼容 Claude Code、Cursor、Codex、Copilot、Cline 等工具。 + type: website + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://9router.com + github: https://github.com/decolua/9router + document: https://github.com/decolua/9router/blob/master/README.md + architectures: + - amd64 + - arm64 diff --git a/apps/9router/latest/data.yml b/apps/9router/latest/data.yml new file mode 100644 index 0000000..4b30c40 --- /dev/null +++ b/apps/9router/latest/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: 20128 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Web Port + labelZh: Web 端口 + required: true + rule: paramPort + type: number + label: + en: Web Port + zh: Web 端口 + - default: 9router + edit: true + envKey: CONTAINER_NAME + labelEn: Container Name + labelZh: 容器名称 + required: true + rule: paramCommon + type: text + label: + en: Container Name + zh: 容器名称 diff --git a/apps/9router/latest/docker-compose.yml b/apps/9router/latest/docker-compose.yml new file mode 100644 index 0000000..ee5fa95 --- /dev/null +++ b/apps/9router/latest/docker-compose.yml @@ -0,0 +1,21 @@ +services: + 9router: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:20128" + volumes: + - ./data:/app/data + environment: + - TZ=Asia/Shanghai + - DATA_DIR=/app/data + - PORT=20128 + - HOSTNAME=0.0.0.0 + image: decolua/9router:latest + labels: + createdBy: "Apps" +networks: + 1panel-network: + external: true diff --git a/apps/9router/logo.png b/apps/9router/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5479a0bac8100f75fd4447f9e95b63d7b8b8cc1d GIT binary patch literal 19788 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

T*|z9EsutfV4c!_shREXvhxr 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 literal 0 HcmV?d00001 diff --git a/apps/9router/v0.4.18/data.yml b/apps/9router/v0.4.18/data.yml new file mode 100644 index 0000000..4b30c40 --- /dev/null +++ b/apps/9router/v0.4.18/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: 20128 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Web Port + labelZh: Web 端口 + required: true + rule: paramPort + type: number + label: + en: Web Port + zh: Web 端口 + - default: 9router + edit: true + envKey: CONTAINER_NAME + labelEn: Container Name + labelZh: 容器名称 + required: true + rule: paramCommon + type: text + label: + en: Container Name + zh: 容器名称 diff --git a/apps/9router/v0.4.18/docker-compose.yml b/apps/9router/v0.4.18/docker-compose.yml new file mode 100644 index 0000000..c1d34f8 --- /dev/null +++ b/apps/9router/v0.4.18/docker-compose.yml @@ -0,0 +1,21 @@ +services: + 9router: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:20128" + volumes: + - ./data:/app/data + environment: + - TZ=Asia/Shanghai + - DATA_DIR=/app/data + - PORT=20128 + - HOSTNAME=0.0.0.0 + image: decolua/9router:v0.4.18 + labels: + createdBy: "Apps" +networks: + 1panel-network: + external: true