luoer-ai-switch
v0.1.2
Published
A small local web UI for switching OpenCode providers.
Maintainers
Readme
AI Switch
一个尽量简单的本地 Web 工具,用来管理 OpenCode 的中转站配置。npm 包名:luoer-ai-switch。

当前功能
- 自动读取
~/.config/opencode/opencode.json - 支持
OPENCODE_CONFIG自定义路径 - 通过表单加入 OpenCode provider、npm SDK、模型和自定义 headers
- 从 OpenAI 兼容的
/models接口自动拉取模型列表 - 按模型 ID 匹配本地维护的能力目录,补全已确认的上下文、输出和 variants
- 直接编辑完整 JSON 配置
- 每次保存前自动备份
- 查看和恢复历史备份
- 服务仅监听
127.0.0.1
界面
| 中转站管理 | JSON 编辑器 | 版本历史 |
|---|---|---|
|
|
|
|
本地运行
需要 Node.js 18 或更高版本。
npm install
npm run dev浏览器会自动打开 http://127.0.0.1:3456。
不自动打开浏览器:
AI_SWITCH_NO_OPEN=1 npm run dev指定端口:
AI_SWITCH_PORT=4567 npm run dev构建和命令行测试
npm run build
npm link
luoer-ai-switch --help发布和 npx 使用
发布到 npm(prepublishOnly 会自动执行完整构建):
npm publish发布后用户无需安装,直接运行:
npx luoer-ai-switch
npx luoer-ai-switch --port 4567
npx luoer-ai-switch --no-open命令行参数
| 参数 | 说明 |
|---|---|
| --port <n> | 服务端口(默认 3456) |
| --no-open | 不自动打开浏览器 |
| -v, --version | 显示版本号 |
| -h, --help | 显示帮助 |
服务仅监听 127.0.0.1。配置路径默认 ~/.config/opencode/opencode.json,可用 OPENCODE_CONFIG 环境变量覆盖。
配置和备份位置
默认配置:~/.config/opencode/opencode.json
AI Switch 应用数据目录由 env-paths 按操作系统决定。macOS 通常是 ~/Library/Preferences/ai-switch/,Linux 通常是 ~/.config/ai-switch/,Windows 通常是 %APPDATA%/ai-switch/。
版本目录位于应用数据目录下的 versions/,管理记录位于 state.json。
如果设置了 OPENCODE_CONFIG,只会改变 OpenCode 配置文件位置,不会改变 AI Switch 自己的数据目录。
OpenCode 配置格式
生成的 provider 结构遵循 OpenCode 官方配置格式:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"my-relay": {
"npm": "@ai-sdk/openai-compatible",
"name": "My AI Provider",
"options": {
"baseURL": "https://example.com/v1",
"apiKey": "sk-example",
"headers": {
"Authorization": "Bearer custom-token"
}
},
"models": {
"claude-sonnet-4-5": {
"name": "claude-sonnet-4-5"
}
}
}
}
}模型拉取要求中转站提供 OpenAI 兼容的 GET {baseURL}/models 接口。接口只负责发现模型 ID;AI Switch 再用 src/model-catalog.json 中的精确 ID 目录补全能力参数。未匹配的 ID 只导入名称,不会猜测参数。目录内容可审阅和更新。API Key 和自定义 headers 仅由本地服务用于该请求。
每个模型都会补全并可在抽屉中调整能力参数,按 OpenCode 的真实 schema 写入:
tool_call:是否支持工具调用(对应能力目录里的 tools)modalities.input/modalities.output:模型接受的输入/输出模态(text、image、video、pdf、audio)limit.context/limit.output:上下文与单次输出 token 上限
License
MIT © loreluo2077
