Skip to content

goehou/pi-switch

Repository files navigation

pi-switch

底层模型配置切换器 for pi(cc-switch 风格)

pi-switch 是一个基于 Tauri 2 的桌面应用,用于管理 pi 编程助手的「底层模型配置」—— 把 provider / model / 认证凭证打包成一个个 profile,一键切换写入 pi 的实时配置文件, 免去手动编辑 JSON 的麻烦。

功能特性

  • Profile 管理:新建 / 编辑 / 复制 / 删除多套模型配置
  • 一键切换:把选中 profile 的 provider、auth、默认模型写入 pi 的实时配置
  • 从当前配置导入:抓取 pi 当前的 settings.json / models.json / auth.json 存为新 profile
  • 模型列表拉取:调用 OpenAI 兼容的 /models 端点,点选模型;支持版本段 URL、 Anthropic 兼容子路径等多种 baseURL 格式
  • 拖拽排序:手动模式下卡片可拖拽,顺序持久化
  • 漂移检测:当 live 配置与当前 profile 不一致(可能被外部修改)时显示警告徽章
  • 系统托盘:常驻托盘,关闭主窗口改为隐藏;托盘菜单可直接切换 profile
  • 单实例:二次启动时聚焦已有窗口
  • 暗色 / 亮色主题,窗口位置与尺寸跨启动持久化
  • 导入 / 导出:整个 profile 库备份为 JSON
  • 快捷键/ 聚焦搜索、Ctrl/Cmd+N 新建、Ctrl/Cmd+S 保存编辑、Esc 关闭模态

技术栈

  • 前端:React 18 + TypeScript + Vite 5
  • 后端:Rust + Tauri 2
  • HTTP:reqwest (rustls)
  • 跨平台:Windows / macOS / Linux

项目结构

pi-switch/
├── src/                    # 前端
│   ├── App.tsx             # 主界面与状态编排
│   ├── api.ts              # Tauri invoke 封装
│   ├── types.ts            # 前后端共享类型
│   ├── hooks.ts            # 主题 / 窗口状态
│   ├── components/         # ProviderCard / ProfileEditor / 等组件
│   └── styles.css
└── src-tauri/
    ├── src/
    │   ├── main.rs         # Tauri Builder、单实例、托盘、窗口事件
    │   ├── commands.rs     # 暴露给前端的 #[tauri::command]
    │   ├── config.rs       # 路径解析 + 原子 JSON 读写
    │   ├── profile.rs      # Profile / Store + 写入 live 配置
    │   ├── model_fetch.rs  # 拉取 /models 端点
    │   └── tray.rs         # 系统托盘菜单
    ├── Cargo.toml
    └── tauri.conf.json

配置文件位置

所有配置位于 ~/.pi/agent/(Windows 下为 C:\Users\<你>\.pi\agent\):

文件 说明
pi-switch.json pi-switch 自身状态(profiles / current / order)
settings.json pi 设置 — 切换时写入 defaultProvider / defaultModel / defaultThinkingLevel
models.json pi 模型定义 — 切换时 upsert providers.<name>
auth.json pi 凭证 — 切换时 upsert <authKey>

写入采用原子操作(先写临时文件再 rename),避免中途崩溃损坏配置。

开发

前置依赖

本地运行

npm install
npm run tauri dev

构建发布包

npm run tauri build

产物位于 src-tauri/target/release/bundle/

工作原理

切换一个 profile 时,pi-switch 会:

  1. providerConfig 浅合并写入 models.jsonproviders.<provider>
  2. authCredential 写入 auth.json<authKey>
  3. settings.json 设置 defaultProvider / defaultModel / defaultThinkingLevel
  4. pi-switch.json 记录 current 指向该 profile,并刷新托盘菜单

若 profile 的 providerConfig.baseUrl 为空,则视为使用 pi 内置 provider(仅写默认模型, 不写入自定义 provider 定义)。

Links

协议

MIT

About

这是一个关于pi模型配置切换的开源项目

Resources

License

Stars

4 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors