Skip to content

Commit efd038e

Browse files
committed
docs: enrich Docker/OtherFeatures/ClaudeCode pages and add plan doc
- Docker.vue: add docker run command, ghcr.io image, local build method - OtherFeatures.vue: add usage dashboard, upgrade notifications, DeepSeek patch - ClaudeCode.vue: add DEBUG=claude:* tip - Add implementation plan doc
1 parent 2c72988 commit efd038e

7 files changed

Lines changed: 270 additions & 5 deletions

File tree

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
# 文档站与 README 同步 - 实施计划
2+
3+
> 日期: 2026-05-18
4+
> 基准: `llm-simple-router-workspace/refactor-perf-bug-fix/README.md`
5+
> 目标: `zhushanwen321.github.io` 文档站
6+
7+
## 背景
8+
9+
README 包含完整的 LLM Simple Router 使用文档,但文档站存在 3 个缺失页面、1 个内容严重不足页面、1 个路由 bug、以及若干内容同步差距。
10+
11+
## 任务拆分
12+
13+
### Task 1: 修复 router/index.ts 重复路由 bug
14+
15+
**文件**: `src/router/index.ts`
16+
**改动**: 删除 5 个重复的 `/social` 路由定义,只保留 1 个
17+
**预估**: 1 行保留 + 删除 10 行
18+
19+
### Task 2: 扩展 i18n 基础设施
20+
21+
**文件**:
22+
- `src/composables/useLocale.ts` — 添加 3 个 SIDEBAR_KEY: `codex`, `piConfig`, `processManagement`
23+
- `src/locales/zh.ts` — 添加 3 个中文翻译
24+
- `src/locales/en.ts` — 添加 3 个英文翻译
25+
- `src/config/sidebar.ts` — 在 `clientConfig` 组添加 Codex/Pi 条目,在 `deploy` 组添加进程管理条目
26+
27+
**新增 key**:
28+
```
29+
sidebar.codex = "Codex 配置" / "Codex Setup"
30+
sidebar.piConfig = "Pi 配置" / "Pi Setup"
31+
sidebar.processMgmt = "进程管理" / "Process Management"
32+
```
33+
34+
**预估**: 每文件改动 ~6 行
35+
36+
### Task 3: 新增 Codex 配置页
37+
38+
**新建文件**: `src/views/project/llm-simple-router/config/Codex.vue`
39+
**路由**: `guide/config/codex`
40+
**内容来源**: README 第 5 节 "配置 Codex"
41+
42+
内容要点:
43+
- `~/.codex/config.toml` 完整模板
44+
- `wire_api = "responses"` 说明(OpenAI Responses API 格式)
45+
- `ROUTER_KEY` 环境变量设置
46+
- 中英双语
47+
- 复用 CodeBlock 组件
48+
49+
**预估**: ~80 行
50+
51+
### Task 4: 新增 Pi Coding Agent 配置页
52+
53+
**新建文件**: `src/views/project/llm-simple-router/config/Pi.vue`
54+
**路由**: `guide/config/pi`
55+
**内容来源**: README 第 6 节 "配置 Pi Coding Agent"
56+
57+
内容要点:
58+
- `~/.pi/agent/models.json` 完整配置模板
59+
- `api: "anthropic-messages"` 连接方式说明
60+
- DeepSeek 模型 compat 配置 (`thinkingFormat: "deepseek"`, `thinkingLevelMap`)
61+
- 模型参数说明(contextWindow, maxTokens, reasoning)
62+
- 中英双语
63+
- 复用 CodeBlock 组件
64+
65+
**预估**: ~100 行
66+
67+
### Task 5: 新增进程管理页
68+
69+
**新建文件**: `src/views/project/llm-simple-router/config/ProcessManagement.vue`
70+
**路由**: `guide/config/process-management`
71+
**内容来源**: README "进程管理" 章节
72+
73+
内容要点:
74+
- PM2: 安装、启动、查看日志、开机自启、升级流程
75+
- systemd: 服务文件模板 (`/etc/systemd/system/llm-simple-router.service`)、启用/启动/查看命令
76+
- npx 手动启动: 注意事项(Ctrl+C 不会恢复)
77+
- 三种方式的升级流程对比
78+
- 中英双语
79+
- 复用 CodeBlock 组件
80+
81+
**预估**: ~130 行
82+
83+
### Task 6: 充实 Docker.vue
84+
85+
**文件**: `src/views/project/llm-simple-router/config/Docker.vue`
86+
**内容来源**: README "Docker 部署" 章节
87+
88+
补充内容:
89+
- `docker run` 完整命令(端口映射、volume、环境变量、restart 策略、镜像地址)
90+
- `ghcr.io/zhushanwen321/llm-simple-router:latest` 镜像说明
91+
- 本地构建方式(注释 image、取消 build 注释)
92+
- 数据目录说明
93+
94+
**预估**: 从 ~30 行扩展到 ~90 行
95+
96+
### Task 7: 补充 OtherFeatures.vue
97+
98+
**文件**: `src/views/project/llm-simple-router/features/OtherFeatures.vue`
99+
**内容来源**: README "其他功能" 表格中用量大盘、升级通知、代理增强描述
100+
101+
补充内容:
102+
- 用量大盘:按时间/模型/密钥维度,5 小时滑动窗口
103+
- 升级通知:新版本自动提醒 + 一键升级
104+
- DeepSeek reasoning_thinking 补丁说明
105+
- proxy_enhance 截图引用
106+
107+
**预估**: +40 行
108+
109+
### Task 8: 补充 ClaudeCode.vue 调试信息
110+
111+
**文件**: `src/views/project/llm-simple-router/config/ClaudeCode.vue`
112+
113+
补充内容:
114+
- `DEBUG=claude:*` 环境变量说明(Tips 部分)
115+
- 当前已有 `--verbose --debug` 参数说明,只需补充 DEBUG 环境变量
116+
117+
**预估**: +4 行
118+
119+
### Task 9: 注册新路由到 router/index.ts
120+
121+
**文件**: `src/router/index.ts`
122+
123+
`llm-simple-router` children 中添加 3 个新路由:
124+
- `guide/config/codex` → Codex.vue
125+
- `guide/config/pi` → Pi.vue
126+
- `guide/config/process-management` → ProcessManagement.vue
127+
128+
**预估**: +12 行
129+
130+
## 执行顺序
131+
132+
```
133+
Task 1 (路由 bug) → 独立,优先
134+
Task 2 (i18n 基础) → Task 3/4/5 的前置依赖
135+
Task 3 (Codex 页) ┐
136+
Task 4 (Pi 页) ├→ 依赖 Task 2,三者可并行
137+
Task 5 (进程管理) ┘
138+
Task 6 (Docker) → 独立
139+
Task 7 (Other) → 独立
140+
Task 8 (ClaudeCode) → 独立
141+
Task 9 (路由注册) → 依赖 Task 3/4/5 的文件创建
142+
```
143+
144+
建议执行批次:
145+
- **批次 1**: Task 1 + Task 2 (基础设施)
146+
- **批次 2**: Task 3 + Task 4 + Task 5 (新建页面,可并行 subagent)
147+
- **批次 3**: Task 6 + Task 7 + Task 8 (内容补充,可并行 subagent)
148+
- **批次 4**: Task 9 (路由注册) → 然后 build 验证
149+
150+
## 涉及文件清单
151+
152+
| 操作 | 文件 |
153+
|------|------|
154+
| 修改 | `src/router/index.ts` |
155+
| 修改 | `src/composables/useLocale.ts` |
156+
| 修改 | `src/locales/zh.ts` |
157+
| 修改 | `src/locales/en.ts` |
158+
| 修改 | `src/config/sidebar.ts` |
159+
| 新建 | `src/views/project/llm-simple-router/config/Codex.vue` |
160+
| 新建 | `src/views/project/llm-simple-router/config/Pi.vue` |
161+
| 新建 | `src/views/project/llm-simple-router/config/ProcessManagement.vue` |
162+
| 修改 | `src/views/project/llm-simple-router/config/Docker.vue` |
163+
| 修改 | `src/views/project/llm-simple-router/features/OtherFeatures.vue` |
164+
| 修改 | `src/views/project/llm-simple-router/config/ClaudeCode.vue` |
165+
166+
**总计**: 3 个新文件 + 8 个修改文件
167+
168+
## 验证标准
169+
170+
1. `npm run build` 无 TypeScript 编译错误
171+
2. 所有 sidebar 链接可点击跳转
172+
3. 新页面中英文切换正常
173+
4. 已有页面内容无回归
174+
5. 截图资源正确加载

images/avatar.jpg

63.2 KB
Loading

images/飞书交流群.png

38.5 KB
Loading

src/views/project/llm-simple-router/config/ClaudeCode.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ const settingsFull = `{
6161
<li><code>settings.json</code> 中的环境变量对所有项目生效</li>
6262
<li>如果只想对当前项目生效,可放在 <code>.claude/settings.json</code>(项目根目录下)</li>
6363
<li>调试时可加参数:<code>claude --dangerously-skip-permissions --verbose --debug</code></li>
64+
<li>设置 <code>export DEBUG=claude:*</code> 可查看 Claude Code 详细内部日志</li>
6465
</ul>
6566
</template>
6667
<template v-else>
@@ -81,6 +82,7 @@ const settingsFull = `{
8182
<li>Environment variables in <code>settings.json</code> apply to all projects</li>
8283
<li>To limit to the current project only, place them in <code>.claude/settings.json</code> (project root)</li>
8384
<li>For debugging, add flags: <code>claude --dangerously-skip-permissions --verbose --debug</code></li>
85+
<li>Set <code>export DEBUG=claude:*</code> to view detailed Claude Code internal logs</li>
8486
</ul>
8587
</template>
8688
</div>

src/views/project/llm-simple-router/config/Docker.vue

Lines changed: 64 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,85 @@ import CodeBlock from '../../../../components/CodeBlock.vue'
55
66
const { locale } = useI18n()
77
const isZh = computed(() => locale.value === 'zh')
8+
9+
const quickStartCmd = 'docker compose up -d'
10+
11+
const dockerRunCmd = `docker run -d \\
12+
--name llm-router \\
13+
-p 9981:9981 \\
14+
-v ~/.llm-simple-router:/app/data \\
15+
-e DB_PATH=/app/data/router.db \\
16+
-e TZ=Asia/Shanghai \\
17+
--restart unless-stopped \\
18+
ghcr.io/zhushanwen321/llm-simple-router:latest`
19+
20+
const localBuildCmd = 'docker compose up -d --build'
821
</script>
922

1023
<template>
1124
<div class="prose prose-invert max-w-none">
1225
<template v-if="isZh">
1326
<h1>Docker 部署</h1>
27+
1428
<h2>快速启动</h2>
15-
<CodeBlock code="docker compose up -d" language="bash" />
29+
<CodeBlock :code="quickStartCmd" language="bash" />
1630
<p>环境变量通过 Setup 页面设置,不需要 <code>.env</code> 文件。</p>
31+
1732
<h2>数据持久化</h2>
18-
<p>Docker 部署时,数据存储在容器内的 <code>/root/.llm-simple-router/</code> 目录。通过 Docker volume 挂载确保数据持久化,容器重启后数据不丢失。</p>
33+
<p>
34+
Docker 部署时,数据存储在容器内的 <code>/root/.llm-simple-router/</code>
35+
目录。通过 Docker volume 挂载确保数据持久化,容器重启后数据不丢失。
36+
</p>
37+
38+
<h2>直接拉取镜像(推荐)</h2>
39+
<p>
40+
使用 <code>docker compose</code> 是最简单的方式,如上所述执行
41+
<code>docker compose up -d</code> 即可。也可以直接使用 <code>docker run</code> 命令:
42+
</p>
43+
<CodeBlock :code="dockerRunCmd" language="bash" />
44+
<p>
45+
数据目录映射到宿主机的 <code>~/.llm-simple-router/</code>,其他环境变量(如 API Key、模型配置等)启动后通过
46+
Setup 页面设置。
47+
</p>
48+
49+
<h2>本地构建</h2>
50+
<p>
51+
如果需要自行构建镜像,编辑 <code>docker-compose.yml</code>,注释掉 <code>image</code> 行,取消
52+
<code>build</code> 部分的注释,然后执行:
53+
</p>
54+
<CodeBlock :code="localBuildCmd" language="bash" />
1955
</template>
56+
2057
<template v-else>
2158
<h1>Docker Deployment</h1>
59+
2260
<h2>Quick Start</h2>
23-
<CodeBlock code="docker compose up -d" language="bash" />
61+
<CodeBlock :code="quickStartCmd" language="bash" />
2462
<p>Environment vars are set via the Setup page, no <code>.env</code> file needed.</p>
63+
2564
<h2>Data Persistence</h2>
26-
<p>In Docker, data is stored at <code>/root/.llm-simple-router/</code> inside the container. Use Docker volume mounts for data persistence so data is not lost on container restart.</p>
65+
<p>
66+
In Docker, data is stored at <code>/root/.llm-simple-router/</code> inside the container. Use
67+
Docker volume mounts for data persistence so data is not lost on container restart.
68+
</p>
69+
70+
<h2>Pull Image Directly (Recommended)</h2>
71+
<p>
72+
Using <code>docker compose</code> is the simplest approach — just run
73+
<code>docker compose up -d</code> as shown above. You can also use <code>docker run</code> directly:
74+
</p>
75+
<CodeBlock :code="dockerRunCmd" language="bash" />
76+
<p>
77+
The data directory is mapped to <code>~/.llm-simple-router/</code> on the host. Other environment
78+
variables (API keys, model configs, etc.) can be configured via the Setup page after startup.
79+
</p>
80+
81+
<h2>Local Build</h2>
82+
<p>
83+
To build the image yourself, edit <code>docker-compose.yml</code>: comment out the
84+
<code>image</code> line and uncomment the <code>build</code> section, then run:
85+
</p>
86+
<CodeBlock :code="localBuildCmd" language="bash" />
2787
</template>
2888
</div>
2989
</template>

src/views/project/llm-simple-router/features/OtherFeatures.vue

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script setup lang="ts">
22
import { computed } from 'vue'
33
import { useI18n } from 'vue-i18n'
4+
import ScreenShot from '../../../../components/ScreenShot.vue'
45
const { locale } = useI18n()
56
const isZh = computed(() => locale.value === 'zh')
67
</script>
@@ -40,6 +41,20 @@ const isZh = computed(() => locale.value === 'zh')
4041
Provider 级别支持 SOCKS5 / HTTPS 代理,在 Provider 编辑弹窗中配置。
4142
详见 <router-link to="/project/llm-simple-router/guide/features/providers">供应商管理</router-link>。
4243
</p>
44+
45+
<h2>用量大盘</h2>
46+
<p>在 Dashboard 页面查看按时间、模型、密钥等维度的用量统计。内置 5 小时滑动窗口,适配 Coding Plan 的计量周期。</p>
47+
<p>支持查看 Token 消耗趋势、请求成功率、按 Provider 分组的详细数据。</p>
48+
49+
<h2>升级通知</h2>
50+
<p>新版本发布时自动在管理后台弹出升级提醒。点击一键升级后重启服务即可完成更新。</p>
51+
<p>升级不会丢失数据,所有配置和日志保存在 <code>~/.llm-simple-router/</code> 目录中。</p>
52+
53+
<h2>DeepSeek 推理补丁</h2>
54+
<p>Router 内置 DeepSeek <code>reasoning_thinking</code> 补丁,自动处理 DeepSeek 模型的推理输出格式。支持 DS 和其他模型在同一个映射表中混用切换。</p>
55+
<p>使用 OpenAI SDK 或 Claude Code 调用 DeepSeek 模型时,无需关心推理格式的差异。</p>
56+
57+
<ScreenShot src="/images/llm-simple-router/proxy_enhance.png" caption="代理增强(实验性)" />
4358
</template>
4459

4560
<template v-else>
@@ -76,6 +91,20 @@ const isZh = computed(() => locale.value === 'zh')
7691
Per-Provider SOCKS5/HTTPS proxy — configure in the Provider edit dialog.
7792
See <router-link to="/project/llm-simple-router/guide/features/providers">Provider Management</router-link>.
7893
</p>
94+
95+
<h2>Usage Dashboard</h2>
96+
<p>View usage statistics by time, model, and key in the Dashboard page. Built-in 5-hour sliding window adapts to Coding Plan billing cycles.</p>
97+
<p>Supports token consumption trends, request success rates, and detailed per-Provider data.</p>
98+
99+
<h2>Upgrade Notifications</h2>
100+
<p>Automatic upgrade notification popup in admin panel when a new version is released. One-click upgrade and service restart to complete the update.</p>
101+
<p>Upgrades do not lose data — all config and logs are preserved in <code>~/.llm-simple-router/</code>.</p>
102+
103+
<h2>DeepSeek Reasoning Patch</h2>
104+
<p>Built-in DeepSeek <code>reasoning_thinking</code> patch automatically handles DeepSeek model reasoning output format. Supports mixing DS and other models in the same mapping table.</p>
105+
<p>No need to worry about reasoning format differences when calling DeepSeek models via OpenAI SDK or Claude Code.</p>
106+
107+
<ScreenShot src="/images/llm-simple-router/proxy_enhance.png" caption="Proxy Enhancement (Experimental)" />
79108
</template>
80109
</div>
81110
</template>

tsconfig.tsbuildinfo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"root":["./src/main.ts","./src/vite-env.d.ts","./src/composables/uselocale.ts","./src/config/sidebar.ts","./src/i18n/index.ts","./src/locales/en.ts","./src/locales/zh.ts","./src/router/index.ts","./src/app.vue","./src/components/codeblock.vue","./src/components/docfooter.vue","./src/components/mermaid.vue","./src/components/navbar.vue","./src/components/screenshot.vue","./src/components/sidebar.vue","./src/layouts/doclayout.vue","./src/views/project/llm-simple-router/faq.vue","./src/views/project/llm-simple-router/overview.vue","./src/views/project/llm-simple-router/architecture/architecture.vue","./src/views/project/llm-simple-router/config/claudecode.vue","./src/views/project/llm-simple-router/config/docker.vue","./src/views/project/llm-simple-router/config/env.vue","./src/views/project/llm-simple-router/features/autoretry.vue","./src/views/project/llm-simple-router/features/concurrency.vue","./src/views/project/llm-simple-router/features/modelmapping.vue","./src/views/project/llm-simple-router/features/monitor.vue","./src/views/project/llm-simple-router/features/multikey.vue","./src/views/project/llm-simple-router/features/otherfeatures.vue","./src/views/project/llm-simple-router/features/providers.vue","./src/views/project/llm-simple-router/getting-started/index.vue","./src/views/project/llm-simple-router/logging/pipeline.vue","./src/views/social/socialpage.vue"],"version":"5.7.3"}
1+
{"root":["./src/main.ts","./src/vite-env.d.ts","./src/composables/uselocale.ts","./src/config/sidebar.ts","./src/i18n/index.ts","./src/locales/en.ts","./src/locales/zh.ts","./src/router/index.ts","./src/app.vue","./src/components/codeblock.vue","./src/components/docfooter.vue","./src/components/mermaid.vue","./src/components/navbar.vue","./src/components/screenshot.vue","./src/components/sidebar.vue","./src/layouts/doclayout.vue","./src/views/project/llm-simple-router/faq.vue","./src/views/project/llm-simple-router/overview.vue","./src/views/project/llm-simple-router/architecture/architecture.vue","./src/views/project/llm-simple-router/config/claudecode.vue","./src/views/project/llm-simple-router/config/codex.vue","./src/views/project/llm-simple-router/config/docker.vue","./src/views/project/llm-simple-router/config/env.vue","./src/views/project/llm-simple-router/config/pi.vue","./src/views/project/llm-simple-router/config/processmanagement.vue","./src/views/project/llm-simple-router/features/autoretry.vue","./src/views/project/llm-simple-router/features/concurrency.vue","./src/views/project/llm-simple-router/features/modelmapping.vue","./src/views/project/llm-simple-router/features/monitor.vue","./src/views/project/llm-simple-router/features/multikey.vue","./src/views/project/llm-simple-router/features/otherfeatures.vue","./src/views/project/llm-simple-router/features/providers.vue","./src/views/project/llm-simple-router/getting-started/index.vue","./src/views/project/llm-simple-router/logging/pipeline.vue","./src/views/social/socialpage.vue"],"version":"5.7.3"}

0 commit comments

Comments
 (0)