一个基于 Tauri + Vue 3 + TypeScript 开发的 Windsurf 多账号管理桌面应用,用于管理多个 Windsurf 账号并提供积分重置、账单查询、一键换号、订阅支付等功能。
⚠️ 免费软件声明:本软件完全免费,如果你是付费购买的,说明你被骗了!
- 当前版本: 1.7.6
- 许可证: AGPL-3.0
- 开发语言: Rust + TypeScript
- 支持平台: Windows 10/11
- 架构模式: Tauri 2.x 桌面应用
🌐 English Version: README_EN.md
- ✅ 添加/编辑/删除账号 - 完整的账号CRUD操作
- ✅ 账号分组管理 - 支持自定义分组,便于管理多个账号
- ✅ 标签系统 - 为账号添加自定义标签
- ✅ 账号状态实时显示 - 显示套餐类型、积分余额、过期时间等
- ✅ 批量账号操作 - 批量选择、批量重置、批量删除
- ✅ 密码/Token加密存储 - 使用AES-256-GCM加密,密钥存储在系统密钥链
- ✅ 一键积分重置 - 通过座位数更新API实现积分重置
- ✅ 智能座位轮换 - 自动在3/4/5座位数之间轮换
- ✅ 批量重置 - 支持多账号同时重置(最多5个并发)
- ✅ 团队批量重置 - 一键重置团队内所有成员的积分
- ✅ 自动重置计划 - 设置定时任务,自动执行积分重置
- ✅ 查看团队成员 - 列出团队内所有成员信息
- ✅ 邀请成员 - 通过邮箱邀请新成员加入团队
- ✅ 移除成员 - 从团队中移除指定成员
- ✅ 团队积分管理 - 统一管理团队成员的积分
- ✅ 一键切换账号 - 快速切换到其他Windsurf账号
- ✅ 自动Token刷新 - 自动使用refresh_token获取新的access_token
- ✅ OAuth回调触发 - 通过windsurf://协议自动完成登录
- ✅ 机器ID重置 - 重置设备标识,支持多设备使用(需管理员权限)
- ✅ 自动检测Windsurf路径 - 自动查找Windsurf安装位置
- ✅ 一键应用补丁 - 修改extension.js实现无感切换
- ✅ 移除超时限制 - 移除180秒OAuth超时限制
- ✅ 自动备份 - 打补丁前自动备份原文件(最多保留3份)
- ✅ 一键还原 - 从备份文件还原原始状态
- ✅ 自动重启Windsurf - 补丁应用后自动重启生效
- ✅ MCP 工具集成 - 提供 dialog-helper 和 confirm 工具
- ✅ 对话框辅助 - 帮助用户确认操作和输入信息
- ✅ 跨平台支持 - 支持 Windows、Linux、macOS
- ✅ 二进制文件管理 - 构建时按平台复制对应文件
- ✅ 智能打包 - 避免打包所有平台文件,减少安装包体积
- ✅ 虚拟卡生成 - 生成虚拟信用卡信息用于支付测试
- ✅ 自定义卡头 - 支持设置自定义BIN号或BIN范围
- ✅ 隐私支付窗口 - 独立的无痕浏览器窗口打开Stripe支付页面
- ✅ 支付宝/微信收款 - 支持国内支付方式(捐赠)
- ✅ 账单信息查询 - 查询套餐、额度、使用量等信息
- ✅ 订阅状态查看 - 显示订阅类型、到期时间、下次扣费日期
- ✅ 使用量统计 - 查看积分使用情况和剩余额度
- ✅ 全局刷新 - 右上角刷新按钮一键更新所有账号信息
- ✅ 代理配置 - 支持HTTP代理设置
- ✅ 轻量API模式 - 使用GetPlanStatus替代GetCurrentUser减少请求
- ✅ 详细结果显示 - 可选显示API响应的详细信息
- ✅ 操作日志 - 记录所有操作历史,支持导出
- ✅ 系统密钥链 - 使用Windows Credential Manager存储加密密钥
- ✅ AES-256-GCM加密 - 所有敏感信息均加密存储
- ✅ 本地存储 - 数据仅存储在本地,不上传任何服务器
- ✅ 操作日志 - 完整的操作记录便于审计
- ✅ Windsurf 标准版 - 完整支持官方 Windsurf 客户端
- ✅ Windsurf - Next - 支持 Next 版本的独立配置与管理
- ✅ 自动检测 - 自动识别并适配不同客户端版本
- ✅ 独立配置 - 不同客户端使用独立的配置文件和数据存储
- ✅ auth1_token 鉴权 - 支持 Devin 的 auth1_token 认证机制
- ✅ session_token 管理 - 自动刷新 session_token,32天占位机制
- ✅ 多组织支持 - 支持 Devin 多组织账号管理
- ✅ 智能刷新 - 基于 401 错误触发强制刷新机制
- ✅ 关键字段回填 - 自动补充 product 参数等关键字段
- 移植「API密钥」+「Provider Key」两个账号信息 Tab 到 simple 端:
AccountInfoDialog.vue在「Firebase」tab 之后新增「API密钥」(含密钥生成 / 删除 / 复制 / 迁移 API Key / 模型排行榜查询 4 子区块)和「Provider Key」(第三方 AI 服务商密钥增删查,OpenAI / Anthropic / Gemini / XAI / OpenRouter / Groq / Fireworks / Cerebras / Together AI / Azure 等 13 种 Provider)两个 tab;用户详情 / 本地信息 / Firebase tab 同步补齐name属性 +activeInfoTab+onInfoTabChange实现切到该 tab 自动加载数据;新增「新密钥已生成」和「添加 Provider Key」两个子对话框,以及 340+ 行 CSS(含暗色模式适配) - Devin 账号「API密钥」tab 顶部稳定展示当前 session_token:当前账号
auth_provider === 'devin'时,「API密钥」tab header 之后渲染一个稳定区块,直接读取本地account.token(后端存储时已带devin-session-token$前缀,前端零拼接)+ 复制按钮;绿色主题与 Firebase 的 sk-ws-01 风格区分。AccountInfoDialog.vue引入useAccountsStore+ 新增currentAccount/isDevinAccount/devinSessionApiKey3 个 computed,零新增后端调用(纯前端从 Pinia 缓存读)。Firebase 账号该区块不渲染,保留原有「手动点生成新密钥」流程不变 - 后端新增 10 个 Tauri 命令 + 12 个 service 方法:
api_commands.rs新增get_api_key_summary/delete_api_key/register_user_api_key/get_set_user_api_provider_keys/set_user_api_provider_key/delete_user_api_provider_key/migrate_api_key/get_primary_api_key_for_devs/get_global_leaderboard_api_key/get_leaderboard;windsurf_service.rs新增register_user(Firebase ID Token 经 RegisterUser 生成 sk-ws-01 格式 API Key)、provider_id_to_name/provider_name_to_id(33 种 Provider ID 双向映射)、parse_leaderboard_result(BigQueryResult.leaderboard_result.model_stats 解析)与对应的 Windsurf SeatManagement / UserAnalytics gRPC 调用;lib.rs按功能分组注册新命令。复用 simple 端已有的encode_string_field/encode_varint/proto_parser::ProtobufParser/ensure_valid_token/AuthContext::from_account,零新增 helper - 移植「检查Pro试用资格」功能到 simple 端:
WindsurfService::check_pro_trial_eligibility+parse_is_eligible_strict+read_varint严格按 protobuf wire format 解析CheckProTrialEligibility响应,结合 Content-Type 校验 fail-fast,避免「过期但结构合法的 Firebase ID Token 被后端误判 is_eligible=true」的风险;前端先调get_account_valid_token强制刷新 token 再调检查,合格时自动添加「试用资格」标签(色值#E6A23C),不合格时自动清理历史标签保持数据一致。「获取试用链接」按钮后新增「检查Pro试用资格」按钮(Trophy 图标,info 色 plain) - 调整两个项目 AccountCard.vue 按钮布局:把「转换登录方式」按钮从第二排末尾(一键切号之后)移到第一排「账号信息」按钮之后,与「删除账号」等高频管理操作同行排布,Tooltip 依据
auth_provider动态显示Firebase→Devin/Devin→Firebase - 自动按活跃客户端展示「当前账号」+「XXX 版本」(Windsurf / Windsurf - Next 双端):
windsurf_info.rs重构为「进程优先 +state.vscdbmtime fallback」判定策略——仅一个进程在跑 → 选它;两个都在跑 →state.vscdb修改时间更近的;无进程 → 最后打开的那个;新增ClientCandidate常量表(Windsurf + Windsurf - Next 双候选)、is_process_running(Windowstasklist/ Unixpgrep)、resolve_active_client决策函数、read_client_info泛化读取函数。WindsurfCurrentInfo结构扩展client_type/client_display_name/is_running三字段;前端api/index.ts类型同步、MainLayout.vue新增windsurfClientDisplayNameref、AboutDialog.vue标题从硬编码「Windsurf 版本」改为按clientDisplayName动态切换「Windsurf 版本 ↔ Windsurf - Next 版本」,「当前账号」label 旁追加.client-hint徽标标注来源客户端 - 修复 simple 端「当前账号」获取失效:simple 端原
windsurf_info.rs只解析旧版顶级 JSON 字段,Windsurf 新版把账号信息切换到userStatusProtoBinaryBase64protobuf 后该路径失效;本次将 simple 端整体对齐主项目最新实现(保留apiKey双路径兼容 + protobuf 邮箱/用户名提取 + 旧 JSON 字段兜底),零新增依赖(base64/regex/rusqlite/serde_json两端 Cargo.toml 早已齐备) - 影响范围:simple 端账号信息对话框(3 tabs → 5 tabs)、AccountCard 操作第一排按钮(新增转换登录 + 检查Pro试用)、后端 Tauri 命令激活从 38 个 → 48 个;「关于」对话框现可同时识别 Windsurf 与 Windsurf - Next 两个客户端并按活跃状态自动切换标题与账号数据源。主项目同步调整按钮位置与活跃客户端逻辑,两个项目 UI 交互模式对齐
- 新增 Firebase ↔ Devin 账号登录方式互转:针对官方将部分老 Firebase 账号迁移到 Devin 体系(密码未变)导致本地 refresh_token 刷新失败的场景,新增后端双命令
convert_account_to_devin/convert_account_to_firebase,复用账号已存明文密码走目标体系的官方登录接口完成原子切换;账号卡操作第二排末尾加「转换登录方式」按钮,tooltip 按当前auth_provider动态切换(Firebase→Devin/Devin→Firebase);Firebase→Devin 多组织场景内联ElMessageBox + h()渲染 radio list 让用户选org_id后二次提交。设计要点:幂等(目标体系=当前体系时直接already_converted=true无网络请求);原子性(网络失败本地字段零改动);切换成功自动调 GetCurrentUser + GetPlanStatus 补齐配额字段 - 新增 AddAccountDialog 合并卡片 + mode-card 网格美化:删除独立的「Devin 原生注册」卡片,与「Devin 邮箱验证码」合并为统一单卡;进入后以两级 mode-card 网格子单选切换来源(
Devin 原生/Windsurf 侧)与子流程(login/signup,仅 Windsurf 侧需要),Step 1 按source+flow动态渲染密码/姓名字段。新增sourceOptions/flowOptions/selectSource/selectFlow,验证规则合并为devinEmailCodeStep0/Step1/Step1Signup,原devinNative*状态全部清除,业务函数completeDevinNativeRegister重命名为completeDevinEmailCodeNativeRegister并复用合并后的devinEmailCodeEmailToken/formData.devinEmailCodeOtp统一状态 - 修复 WindsurfPostAuth 首次 404 时序竞态:
devin_auth_service.rs的post_auth_to_login_result针对 "Devin 新建账号 → 立刻 PostAuth" 服务端 org 同步延迟,对404 + no_eligible_organizations / not_found特定错误做 1.5s / 3s / 5s 共 3 次指数退避重试(新增is_post_auth_org_sync_pending精确识别辅助函数),覆盖login_with_password/register_with_email_code/login_with_email_code/register_native_with_email_code四条汇聚路径;其他错误保持 fail-fast 不重试 - 新增
enrich_account_with_plan_status/enrich_account_with_plan_status_inner(devin_commands.rs):提供"仅调 GetPlanStatus 并回填账号字段"的独立入口,与enrich_account_with_user_info共享 ctx 构造逻辑 - 修复 Devin 注册/登录路径 QUOTA 模式字段缺失(A.1):
enrich_account_with_user_info内部在 GetCurrentUser 之后追加一次 GetPlanStatus 调用,统一补齐billing_strategy/daily_quota_remaining_percent/weekly_quota_remaining_percent/daily/weekly_quota_reset_at_unix/overage_balance_micros等 QUOTA 模式专用字段,避免账号卡降级到 CREDITS 积分显示 - 修复 Devin 迁入路径 QUOTA 字段缺失(A.2):
add_account_by_devin_session_token/add_account_by_devin_auth1_token两条已有 user_info 的路径在apply_user_info_to_account后显式调enrich_account_with_plan_status单独补齐 QUOTA 字段;auth1_token 路径改用&ctx.token传参,规避account.token已被 move 进 Option 期间无法再借用的 E0502 借用冲突 - 修复 Firebase refresh_token 迁入路径 QUOTA 字段缺失:
account_commands.rs的add_account_by_refresh_token在 GetCurrentUser 之后补一次 GetPlanStatus +apply_plan_status_to_account回填;头部新增use crate::commands::api_commands::apply_plan_status_to_account复用字段映射 - 修复 E0502 借用冲突:
devin_commands.rs:1144处account.token已被 move 到Some(session_token)后,若再以account.token.as_deref()不可变借用会违反借用规则——改用上方构造好的ctx.token(与 session_token 同值,仍 owned 可借)传入enrich_account_with_plan_status - 统一版本号:
package.json/Cargo.toml从1.7.3同步到1.7.5,与tauri.conf.json对齐,消除 GitHub Actionstauri-action版本一致性检查告警 - 影响范围:所有使用 Devin 原生 / Windsurf 侧邮箱验证码 / Firebase refresh_token 建号的路径;配额显示从 CREDITS 降级问题系统性修复;UI 层原 2 张 Devin 邮箱验证码卡 → 1 张(主卡从 8 减到 7)
- 新增 自动更新功能 (tauri-plugin-updater): 集成官方 updater + process 插件,应用启动后 3 秒静默检测 GitHub Releases 最新版本,发现新版时自动弹出更新对话框;支持下载进度实时展示、安装后一键重启、"跳过此版本"本地记忆、24 小时检测防抖
- 新增 UpdateDialog.vue 独立更新对话框: 显示当前版本 / 新版本 / 发布说明 / 下载进度 / 安装状态,支持"立即更新 / 跳过此版本 / 稍后提醒"
- 新增 关于对话框"检查更新"按钮: 版本号旁可手动触发检查(忽略 24h 防抖);按钮文案随状态动态切换(检查中 / 立即更新 / 下载中 / 安装中 / 重启应用)
- 新增 Pinia updater store (
src/store/modules/updater.ts): 统一管理更新检查、下载、安装、重启、版本跳过等状态与动作 - 改造 GitHub Actions 构建流程 (
.github/workflows/build.yml): 6 个构建 Job 注入TAURI_SIGNING_PRIVATE_KEY/TAURI_SIGNING_PRIVATE_KEY_PASSWORD环境变量完成签名;Upload artifacts 扩展收集.msi.sig/.exe.sig/.app.tar.gz.sig/.AppImage.sig;Release Job 新增"合并各平台签名生成 latest.json"步骤并上传至 Release - 新增 Tauri 配置:
src-tauri/tauri.conf.json新增plugins.updater(endpoints 指向 GitHub Releases latest.json、Windows 静默安装、minisign 公钥嵌入)与bundle.createUpdaterArtifacts: true;capabilities/default.json授权updater:default+process:default - 新增 前端依赖:
@tauri-apps/plugin-updater+@tauri-apps/plugin-process - 新增 Devin Auth1 Token 直接导入通道: 新增后端命令
add_account_by_devin_auth1_token,用户粘贴浏览器 localStorage 的devin_auth1_token(格式auth1_<52字符>)即可一键迁入 Devin 账号。后端内部自动完成windsurf_post_auth换取 session_token →GetCurrentUser反查 email / 配额 / api_key → 落库;相比 Session Token 迁入通道额外保留 auth1_token,到期可直接用refresh_devin_session续期。AddAccountDialog新增「Devin Auth1 Token」Tab(与「Devin Session Token」并列),BatchImportDialog同步新增devin_auth1_token批量导入模式(多组织自动选 primary org,不中断批量流程) - 修复 macOS / Linux 构建失败: 删除
src-tauri/tauri.conf.json中值为空串的windsurf-account-manager.exe.manifestresource 条目——该 manifest 已通过build.rs::WindowsAttributes::app_manifest直接嵌入 Windows exe,无需作为运行时资源;原空值被 bundler 解析成目录路径触发Is a directory (os error 21) - 对齐 Tauri NPM / Rust crate 版本: 收紧
Cargo.toml中tauri = "2.10"/tauri-build = "2.5"/tauri-plugin-updater = "2.10"/tauri-plugin-dialog = "2.7"/tauri-plugin-opener = "2.5"/tauri-plugin-process = "2.3"版本约束;同步刷新package.json中@tauri-apps/*依赖与package-lock.json,消除 tauri-action 的版本一致性检查告警 - 优化 GitHub Actions Release 流程 (
.github/workflows/build.yml): Release Job 自动从 README.md 提取当前版本的版本历史条目作为 GitHub Release 描述与latest.json的notes字段;draft: false构建完成后直接发布到 Release 页面,无需手动点"Publish release" - 影响范围: 所有平台(Windows x64/arm64、macOS x64/arm64、Linux x64 AppImage);Linux ARM64 因交叉编译限制不支持自动更新(既有限制未改动)
- 修复 Devin 刷新逻辑: 补充关键字段回填、修正 product 参数大小写并完善批量刷新的 store 同步
- 优化 Devin session_token 到期时间占位机制
- 完善无感切换进度事件系统
- 新增 Devin 账号体系完整支持: 实现 auth1_token 鉴权、session_token 刷新与 5-header 认证机制
- 优化 update_codeium_access 错误处理: 新增 Connect Protocol 错误码映射与透明化日志
- 完善 Devin session_token 管理逻辑
- 新增多客户端支持: 支持 Windsurf 和 Windsurf - Next 的独立配置与管理
- 优化客户端检测逻辑
- 改进配置文件路径管理
- 新增计费策略与配额详情字段支持: 支持 billing_strategy、daily_quota、weekly_quota 等字段
- 扩展 OperationType 枚举: 新增分组、标签、团队、数据管理、账号切换、订阅和注册操作类型
- 优化批量刷新逻辑: 复用 apply_plan_status_to_account 函数并简化账号更新流程
- 修复寸止功能问题
- 优化稳定性
- 重构订阅支付功能: 支持 Teams/Pro 计划和月付/年付选择
- 重构 MCP 工具命名: 将
windsurf-cunzhi和zhi工具统一重命名为dialog-helper和confirm
- 恢复完整功能版本
- 移除未使用的 Rank 图标导入
- 新增 QQ 群二维码到 README 交流群章节
- 更新 README.md: 完善功能特性说明和界面展示
- 优化分析数据获取逻辑: 改进 GetAnalytics API 调用效率
- 更新所有平台的 windsurf-cunzhi 和 windsurf-cunzhi-ui 二进制文件
- 优化 cunzhi 文件打包策略: 构建时按平台复制,避免打包所有平台文件
- 修复 Linux ARM64 连接器问题
- 跳过 Linux ARM64 构建中的 AppImage 打包,仅生成 deb 和 rpm 包
- 框架: Vue 3.5.13 + TypeScript 5.6.2
- UI组件: Element Plus 2.11.8
- 图标库: @element-plus/icons-vue 2.3.2
- 状态管理: Pinia 3.0.4
- 构建工具: Vite 6.0.3
- 样式: CSS3 + Element Plus主题 + Sass 1.94.2
- HTTP客户端: Axios 1.13.2
- 加密库: Crypto-js 4.2.0
- 日期处理: Dayjs 1.11.19
- 图表库: ECharts 6.0.0
- 拖拽排序: Vuedraggable 4.1.0
- UUID生成: UUID 13.0.0
- 框架: Tauri 2.x
- 语言: Rust 2021 Edition
- 加密: AES-256-GCM (aes-gcm 0.10)
- 密钥管理: Windows Credential Manager / Keyring 2.0
- 网络请求: Reqwest 0.11 (支持 JSON、SOCKS 代理)
- 异步运行时: Tokio 1.x (full features)
- 序列化: Serde 1.0 + Serde JSON 1.0
- 数据库: SQLite 3.31 (bundled) - 用于 Windsurf state.vscdb 操作
- 时间处理: Chrono 0.4
- 编码: Base64 0.21 + Hex 0.4
- 错误处理: Anyhow 1.0 + Thiserror 1.0
- 日志: Log 0.4 + Env Logger 0.10
- 文件压缩: Zip 0.6
- 正则表达式: Regex 1.10
- 注册表操作: Winreg 0.52
- Windows API: Winapi 0.3 (securitybaseapi, processthreadsapi, winnt, handleapi, minwindef, shellapi, winuser)
- 系统调用: Libc 0.2
- Node.js 16+
- Rust 1.70+
- Windows 10/11(目前仅支持Windows)
# 克隆项目
git clone https://github.com/chaogei/windsurf-account-manager-simple.git
cd windsurf-account-manager-simple
# 安装依赖
npm install
# 开发模式运行
npm run tauri dev# 构建Windows安装包
npm run tauri build构建完成后,安装包位于 src-tauri/target/release/bundle/
- 启动应用后,点击右上角的"添加账号"按钮(+图标)
- 在弹出的对话框中输入 Windsurf 账号信息:
- 邮箱: 你的 Windsurf 账号邮箱
- 密码: 账号密码
- 备注名称: 便于识别的名称(可选)
- 分组: 选择或创建分组(可选)
- 标签: 添加自定义标签(可选)
- 点击"确定"保存账号
- 应用会自动登录并获取账号信息
单账号重置:
- 在账号卡片上点击"积分重置"按钮(刷新图标)
- 应用会自动:
- 登录获取 Token(如需要)
- 执行一次座位数更新(在 3/4/5 之间自动切换)
- 座位更新成功即完成积分重置
- 操作结果会通过通知提示
- 可在设置中开启"显示详细结果"查看座位更新的具体信息
批量重置:
- 勾选多个账号卡片
- 点击顶部的"批量重置积分"按钮
- 确认操作后批量执行(最多 5 个并发)
- 查看操作日志了解详细结果
自动重置:
- 点击"自动重置"按钮
- 设置重置计划(时间、频率、账号)
- 系统会自动在指定时间执行重置
- 可在操作日志中查看自动重置记录
批量导入:
- 点击"批量导入"按钮(多个方块图标)
- 准备账号列表文件,格式:
邮箱 密码 备注 user1@example.com password123 账号1 user2@example.com password456 账号2 - 选择文件并导入
- 确认导入信息
批量删除:
- 勾选要删除的账号卡片
- 点击"批量删除"按钮(垃圾桶图标)
- 确认删除操作
批量刷新:
- 勾选要刷新的账号卡片
- 点击"批量刷新状态"按钮
- 系统会批量更新账号的积分、套餐等信息
导出账号:
- 点击"导出账号"按钮(下载图标)
- 选择导出格式(CSV/JSON/文本)
- 文件会自动下载到本地
创建分组:
- 点击侧边栏的"分组"菜单
- 点击"添加分组"按钮
- 输入分组名称和颜色
- 保存分组
管理分组:
- 在分组列表中可以编辑或删除分组
- 在添加/编辑账号时选择分组
- 分组可以帮助你更好地管理大量账号
添加标签:
- 在添加/编辑账号时点击"标签"输入框
- 输入标签名称
- 选择标签颜色
- 保存标签
管理标签:
- 点击设置中的"标签管理"
- 可以编辑或删除已有标签
- 标签可以帮助你快速筛选账号
查看团队成员:
- 点击账号卡片上的"团队管理"按钮
- 查看团队内所有成员信息
- 查看成员的积分使用情况
邀请成员:
- 在团队管理对话框中点击"邀请成员"
- 输入成员邮箱
- 设置成员权限
- 发送邀请
移除成员:
- 在成员列表中选择要移除的成员
- 点击"移除成员"按钮
- 确认移除操作
标准换号:
- 点击账号卡片上的"切号"按钮(Switch 图标)
- 系统会自动:
- 使用 refresh_token 获取新的 access_token
- 调用 RegisterUser API 获取 api_key
- 加密 sessions 数据并写入 Windsurf 数据库
- 更新 Windsurf 配置文件
- 重置机器 ID
- 自动重启 Windsurf
- 等待 Windsurf 重启完成
无感换号(需要补丁):
- 点击"无感换号补丁"按钮
- 系统会自动检测 Windsurf 安装路径
- 点击"应用补丁"修改 extension.js
- 补丁会移除 180 秒超时限制
- 应用补丁后重启 Windsurf
- 之后可以随时点击"无感切换"按钮快速换号
- 点击侧边栏的"操作日志"
- 查看所有操作记录
- 可以按类型、时间筛选日志
- 支持清空或导出日志
查看账单信息:
- 点击账号卡片上的"账单"按钮
- 查看订阅类型、到期时间
- 查看支付方式、下次扣费日期
- 查看发票链接
更新套餐:
- 点击"更新套餐"按钮
- 选择新的套餐类型(Teams/Pro)
- 选择计费周期(月付/年付)
- 确认更新
查看使用统计:
- 点击账号卡片上的"分析"按钮
- 查看每日活跃统计
- 查看工具使用情况
- 查看模型使用情况
- 查看 Token 消耗统计
应用数据存储在本地:
- Windows:
%APPDATA%\com.chao.windsurf-account-manager\accounts.json
数据结构包括:
- 账号信息(加密的密码和Token)
- 分组列表
- 系统设置
- 操作日志
Windsurf 使用三层存储架构管理登录凭证:
1. 加密层
- 存储位置:
secret://windsurf_auth.sessions - 加密方式: Windows DPAPI 加密
- 数据格式: Buffer 字节数组
- 作用: 存储会话数据和 API Key
2. 状态层
- 存储位置:
windsurfAuthStatus - 数据格式: 明文 JSON
- 包含信息: API Key (sk-ws-01-前缀)、用户信息、团队配置
- 作用: 存储认证状态和用户基本信息
3. 明文层
- 存储位置:
codeium.windsurf-windsurf_auth和codeium.windsurf - 数据格式: 明文
- 包含信息: 用户名、基础配置
- 作用: 存储用户标识和配置信息
数据库文件:
- 路径:
%APPDATA%\Windsurf\User\globalStorage\state.vscdb - 格式: SQLite
- 表名: ItemTable (键值对存储)
配置文件:
- 路径:
%APPDATA%\Windsurf\User\globalStorage\storage.json - 格式: JSON
- 包含信息: 机器 ID、设备标识等
- Windows Credential Manager 集成: 加密密钥存储在系统密钥链
- DPAPI 加密: 与用户账户绑定,只有当前用户可以解密
- Protobuf 编码: 权限配置使用 Protobuf 编码
- 重要提示: API Key 在 windsurfAuthStatus 中明文存储,保护数据库文件至关重要
- 密码安全:所有密码使用AES-256-GCM加密
- 密钥管理:加密密钥存储在系统密钥链中
- Token刷新:Token过期前5分钟自动刷新
- 本地存储:所有数据仅存储在本地,不会上传到任何服务器
- 请妥善保管你的账号信息
- 定期备份
accounts.json文件 - 批量操作时注意API限流
- 建议使用分组功能管理多个账号
windsurf-account-manager-simple/
├── src/ # Vue前端源码
│ ├── views/ # 页面组件
│ │ └── MainLayout.vue # 主布局页面(包含所有功能)
│ ├── components/ # 可复用组件
│ │ ├── AboutDialog.vue # 关于对话框
│ │ ├── AccountCard.vue # 账号卡片组件
│ │ ├── AccountInfoDialog.vue # 账号详细信息对话框
│ │ ├── AddAccountDialog.vue # 添加账号对话框
│ │ ├── AnalyticsDialog.vue # 使用分析对话框
│ │ ├── AutoRefillDialog.vue # 自动充值对话框
│ │ ├── AutoResetDialog.vue # 自动重置对话框
│ │ ├── BatchImportDialog.vue # 批量导入对话框
│ │ ├── BatchUpdatePlanDialog.vue # 批量更新套餐对话框
│ │ ├── BillingDialog.vue # 账单信息对话框
│ │ ├── CardGeneratorDialog.vue # 虚拟卡生成对话框
│ │ ├── CreditHistoryDialog.vue # 积分历史对话框
│ │ ├── EditAccountDialog.vue # 编辑账号对话框
│ │ ├── LogsDialog.vue # 操作日志对话框
│ │ ├── SettingsDialog.vue # 设置对话框
│ │ ├── StatsDialog.vue # 统计信息对话框
│ │ ├── TagColorPicker.vue # 标签颜色选择器
│ │ ├── TagManageDialog.vue # 标签管理对话框
│ │ ├── TeamManagementDialog.vue # 团队管理对话框
│ │ ├── TeamSettingsDialog.vue # 团队设置对话框
│ │ ├── TurnstileDialog.vue # Turnstile验证对话框
│ │ ├── UpdatePlanDialog.vue # 更新套餐对话框
│ │ ├── UpdateSeatsResultDialog.vue # 座位更新结果对话框
│ │ └── WelcomeDialog.vue # 欢迎对话框
│ ├── api/ # API封装层
│ ├── services/ # 业务服务层
│ ├── store/ # Pinia状态管理
│ ├── types/ # TypeScript类型定义
│ ├── utils/ # 工具函数
│ ├── assets/ # 静态资源
│ ├── App.vue # 根组件
│ └── main.ts # 应用入口
├── src-tauri/ # Rust后端源码
│ ├── src/
│ │ ├── commands/ # Tauri命令层(前后端通信接口)
│ │ │ ├── account_commands.rs # 账号管理命令
│ │ │ ├── analytics_commands.rs # 分析数据命令
│ │ │ ├── api_commands.rs # API调用命令
│ │ │ ├── auto_reset_commands.rs # 自动重置命令
│ │ │ ├── cunzhi_commands.rs # 寸止功能命令
│ │ │ ├── devin_commands.rs # Devin账号命令
│ │ │ ├── payment_commands.rs # 支付相关命令
│ │ │ ├── patch_commands.rs # 补丁应用命令
│ │ │ ├── proto_commands.rs # Protobuf解析命令
│ │ │ ├── settings_commands.rs # 设置相关命令
│ │ │ ├── switch_account_commands.rs # 切换账号命令
│ │ │ ├── team_commands.rs # 团队管理命令
│ │ │ ├── app_info.rs # 应用信息命令
│ │ │ ├── validate_path.rs # 路径验证命令
│ │ │ ├── windsurf_info.rs # Windsurf信息命令
│ │ │ └── mod.rs # 命令模块入口
│ │ ├── models/ # 数据模型
│ │ │ ├── account.rs # 账号模型
│ │ │ ├── group.rs # 分组模型
│ │ │ ├── operation_log.rs # 操作日志模型
│ │ │ └── settings.rs # 设置模型
│ │ ├── repository/ # 数据访问层
│ │ │ └── data_store.rs # 数据存储实现
│ │ ├── services/ # 业务逻辑层
│ │ │ ├── auth_service.rs # 认证服务
│ │ │ └── windsurf_service.rs # Windsurf API服务
│ │ ├── utils/ # 工具函数
│ │ │ ├── crypto.rs # 加密工具
│ │ │ ├── proto_parser.rs # Protobuf解析器
│ │ │ └── error.rs # 错误处理
│ │ ├── lib.rs # Rust库入口
│ │ └── main.rs # Tauri应用入口
│ ├── Cargo.toml # Rust依赖配置
│ ├── tauri.conf.json # Tauri配置文件
│ └── build.rs # 构建脚本
├── public/ # 公共资源
│ ├── 交流群.png # 微信群二维码
│ ├── QQ群.jpg # QQ群二维码
│ └── 主页.png # 界面截图
├── scripts/ # 脚本工具
│ └── sync-version.js # 版本同步脚本
├── docs/ # 文档目录
├── package.json # Node依赖配置
├── vite.config.ts # Vite配置
├── tsconfig.json # TypeScript配置
├── tsconfig.node.json # Node环境TypeScript配置
├── build_with_admin.bat # 管理员权限构建脚本
├── set_admin_manifest.ps1 # 设置管理员清单脚本
└── README.md # 项目文档
应用集成了以下 Windsurf API:
- 端点:
https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword - 端点:
https://securetoken.googleapis.com/v1/token - 功能: 用户登录、Token 刷新
- 认证方式: API Key + Referer 头
- 重要: 必须携带
Referer: https://windsurf.com/头,否则返回 403 错误(API_KEY_HTTP_REFERRER_BLOCKED) - 建议: 同时添加
X-Client-Version: Chrome/JsCore/11.0.0/FirebaseCore-web头
-
UpdateSeats: 更新团队席位数量
- 端点:
https://web-backend.windsurf.com/exa.seat_management_pb.SeatManagementService/UpdateSeats - 功能: 通过修改席位数量实现积分重置
- 协议: Connect-Web (gRPC-Web)
- 请求格式: Protobuf
- 端点:
-
GetPlanStatus: 获取账号套餐状态
- 端点:
https://web-backend.windsurf.com/exa.seat_management_pb.SeatManagementService/GetPlanStatus - 功能: 获取积分余额、配额信息、计费策略
- 响应字段: available_flex_credits, available_prompt_credits, used_flex_credits, used_prompt_credits, billing_strategy, daily_quota, weekly_quota
- 端点:
- GetTeamBilling: 获取团队账单信息
- 端点:
https://web-backend.windsurf.com/exa.seat_management_pb.SeatManagementService/GetTeamBilling - 功能: 查询订阅状态、支付方式、计费周期
- 响应字段: 订阅类型、席位数量、单价、支付方式、下次扣费日期
- 端点:
-
GetCurrentUser: 获取当前用户信息
- 端点:
https://web-backend.windsurf.com/exa.seat_management_pb.SeatManagementService/GetCurrentUser - 功能: 获取用户基本信息、团队信息、套餐信息、权限信息
- 响应字段: UserBasicInfo, TeamInfo, PlanInfo, UserRole
- 端点:
-
GetUsers: 获取团队成员列表
- 端点:
https://web-backend.windsurf.com/exa.seat_management_pb.SeatManagementService/GetUsers - 功能: 批量获取团队成员信息
- 响应字段: users[], user_roles[], user_team_details[], user_cascade_details[]
- 端点:
-
RegisterUser: 注册用户获取 API Key
- 端点:
https://register.windsurf.com/exa.seat_management_pb.SeatManagementService/RegisterUser - 功能: 使用 Firebase Token 注册获取 sk-ws-01 格式 API Key
- 响应字段: api_key, name, api_server_url
- 端点:
API Key 格式说明:
- 格式: sk-ws-01-[88-94字符Base64编码]
- 总长度: 103字符
- 结构: sk(Secret Key) + ws(WindSurf) + 01(版本) + Base64编码payload
- 字符分布: 大写35%、小写45%、数字17%、连字符4%
- 随机性: 96.7%(接近最大熵,安全性高)
- 编码: Base64编码,解码后32字节二进制数据
- 获取流程: Firebase 登录获取 ID Token → 调用 RegisterUser API → 返回 sk-ws-01 格式 API Key
- 重要: RegisterUser API 既支持 register.windsurf.com 也支持 web-backend.windsurf.com
- InviteTeamMember: 邀请团队成员
- RemoveTeamMember: 移除团队成员
- UpdateTeamSettings: 更新团队设置
- GetAnalytics: 获取使用分析数据
- 端点:
https://web-backend.windsurf.com/exa.user_analytics_pb.UserAnalyticsService/GetAnalytics - 功能: 获取每日活跃统计、工具使用、模型使用、Token 消耗
- 响应字段: cascade_lines, cascade_tool_usage, cascade_runs, daily_active_user_counts
- 端点:
- GetTeamCreditEntries: 获取积分获取历史
- 端点:
https://web-backend.windsurf.com/exa.seat_management_pb.SeatManagementService/GetTeamCreditEntries - 功能: 查询积分获取记录(推荐奖励、购买等)
- 响应字段: FlexCreditChronicalEntry(团队ID、授予时间、积分数量、类型、原因)
- 端点:
- ProcessReferralCode: 处理推荐码
- 端点:
https://web-backend.windsurf.com/exa.seat_management_pb.SeatManagementService/ProcessReferralCode - 功能: 使用推荐码获取 25,000 PROMPT 积分奖励
- 请求字段: auth_token, referral_code
- 端点:
- auth1_token 鉴权: Devin 专属认证机制
- session_token 刷新: 自动刷新 session_token
- 5-header 认证: 完整的认证头设置
Windsurf API 调用需要携带完整的浏览器相关请求头:
必需的请求头:
connect-protocol-version: "1"- Connect-Web 协议版本x-debug-email: ""- 调试邮箱(空字符串)x-debug-team-name: ""- 调试团队名称(空字符串)Referer: https://windsurf.com/- Referer 头(Firebase API 必需)X-Client-Version: Chrome/JsCore/11.0.0/FirebaseCore-web- 客户端版本(建议)
浏览器标识头:
sec-ch-ua- 用户代理提示sec-ch-ua-mobile- 移动设备提示sec-ch-ua-platform- 平台提示User-Agent- 完整的用户代理字符串
UpdateSeats 请求体:
- 前缀:
0x0a, 0xa1, 0x07(固定协议标识) - Token: 认证 Token
- 座位字节:
0x10, seat_count
GetTeamBilling 请求体:
- 前缀:
0x0a, 0xa1, 0x07(固定协议标识) - Token: 认证 Token
注意: 前缀 0xa1 0x07 是固定的协议标识,不要修改
应用采用 Tauri 桌面应用架构,前后端分离设计:
┌─────────────────────────────────────────────────────────┐
│ 前端 (Vue 3) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ UI 组件层 │ │ 状态管理层 │ │ API 调用层 │ │
│ │ Components │ │ Pinia │ │ Axios/Tauri │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
│
Tauri IPC
│
┌─────────────────────────────────────────────────────────┐
│ 后端 (Rust) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 命令层 │ │ 服务层 │ │ 数据层 │ │
│ │ Commands │ │ Services │ │ Repository │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 模型层 │ │ 工具层 │ │ 加密层 │ │
│ │ Models │ │ Utils │ │ Crypto │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
1. 前端分层
- UI 组件层: 可复用的 Vue 组件(对话框、卡片、表单等)
- 状态管理层: Pinia Store 管理应用状态
- API 调用层: 封装 Tauri IPC 调用,与后端通信
2. 后端分层
- 命令层 (Commands): Tauri 命令接口,处理前端请求
- 服务层 (Services): 业务逻辑处理(认证、API 调用等)
- 数据层 (Repository): 数据持久化(JSON 文件、密钥链)
- 模型层 (Models): 数据结构定义
- 工具层 (Utils): 通用工具函数(加密、解析等)
用户操作 → 前端组件 → Pinia Store → Tauri Command → Rust Service → API 调用
↓
响应 ← 前端组件 ← Pinia Store ← Tauri Command ← Rust Service ← Windsurf API
1. 加密存储
- 账号密码: AES-256-GCM 加密
- 加密密钥: Windows Credential Manager 存储
- Token: 内存缓存 + 自动刷新机制
2. 认证流程
- Firebase 认证获取 ID Token
- ID Token 刷新过期 Token
- API 调用携带完整认证头
3. 隐私保护
- 所有数据本地存储
- 不上传任何信息到服务器
- 支付窗口使用无痕模式
采用 单一真相源 策略:
src-tauri/tauri.conf.json中的version字段为唯一真相源- 前端通过
get_app_versionAPI 动态获取版本号 build.rs构建时自动读取tauri.conf.json生成 Windows manifest- 使用
node scripts/sync-version.js同步package.json和Cargo.toml
1. 前端错误处理
- Try-catch 捕获异步错误
- ElMessage 显示错误提示
- 错误日志记录到操作日志
2. 后端错误处理
- Anyhow 统一错误处理
- Result<T, String> 返回类型
- 自定义错误类型 (AppError)
- Connect Protocol 错误码映射
3. API 错误处理
- 401 错误触发 Token 刷新
- 网络错误自动重试
- 超时错误提示用户
1. 前端优化
- 虚拟滚动处理大量账号
- 防抖/节流控制请求频率
- 组件懒加载
- Pinia 持久化缓存
2. 后端优化
- 异步并发处理批量操作
- Token 复用避免重复登录
- SQLite 连接池
- Protobuf 高效序列化
3. 网络优化
- 轻量 API 模式(GetPlanStatus 替代 GetCurrentUser)
- 请求头缓存
- HTTP/2 支持
- 代理支持
无感换号补丁备份:
- 最多保留 3 份备份:防止备份文件无限累积
- 自动清理旧备份:当备份数量达到或超过 3 个时,自动删除最早的备份文件
- 按时间排序:通过文件修改时间排序,确保删除的是最旧的备份
- 备份文件命名格式:
extension.js.backup.YYYYMMDD_HHMMSS - 示例:
extension.js.backup.20251122_192115
实现逻辑:
// 查找所有备份文件(以 "extension.js.backup." 开头)
// 按修改时间排序
// 删除超出数量的旧备份(保留最新的 3 份)座位更新API返回的解析后JSON包含:
success: 操作是否成功total_seats: 总座位数(对应int_4字段)used_seats: 已使用座位数(对应int_5字段)seat_usage: 座位使用情况(如:"1 / 5")seat_usage_percentage: 座位使用率百分比(计算得出)price_per_seat: 每座位月费(对应float_3字段,单位:美元)total_monthly_price: 总月费(对应float_6字段,单位:美元)billing_start_time: 当前计费周期开始时间(对应subMesssage_7.int_1时间戳)next_billing_time: 下次计费时间(对应subMesssage_8.int_1时间戳)billing_start_timestamp: 计费开始时间戳(Unix时间戳)next_billing_timestamp: 下次计费时间戳(Unix时间戳)
Protobuf字段映射:
float_3: 每座位月费价格(如:60 = $60/月/座位)int_4: 总座位数(如:5)int_5: 已使用座位数(如:1)float_6: 总月费(如:300 = $300/月)subMesssage_7.int_1: 当前计费周期开始时间戳subMesssage_8.int_1: 下次计费时间戳
账单查询API返回的解析后JSON包含:
plan_name: 套餐名称base_quota: 套餐基础额度(对应int_8字段)extra_credits: 额外积分(对应int_4字段,可选)total_quota: 总额度(base_quota + extra_credits)used_quota: 已使用额度(对应int_6字段,可选,默认0)cache_limit: 缓存限额(对应int_9字段)payment_method: 支付方式信息next_billing_date: 下次扣费日期invoice_url: 发票链接monthly_price: 月费价格
Protobuf字段映射:
int_4: 额外积分(赠送或购买的额外额度,可能不存在)int_6: 使用积分(已使用额度,可能不存在)int_8: 套餐额度(基础套餐额度)int_9: 套餐缓存限额(超过此限额将无法使用)
注意:当缓存使用率达到缓存限额时,即使总额度还有剩余也将无法继续使用。
A: 请检查以下事项:
- 账号密码是否正确 - 确认输入的邮箱和密码无误
- 网络连接是否正常 - 检查网络连接,必要时配置代理
- Token是否过期 - 尝试重新登录刷新 Token
- 账号是否为团队管理员 - 只有团队管理员才能执行座位更新
- API 限流 - 批量操作时注意控制并发数量,避免触发限流
A: 复制以下文件到安全位置:
- Windows:
%APPDATA%\com.chao.windsurf-account-manager\accounts.json - 注意: accounts.json 包含加密的敏感信息,备份时请妥善保管
A: 应用中存储的密码是 AES-256-GCM 加密的,无法查看明文。需要:
- 在 Windsurf 官网重置密码
- 在应用中删除旧账号
- 重新添加账号
A: 这是密钥链中的加密密钥已改变或损坏导致的。解决步骤:
- 删除旧的账号数据文件:
Remove-Item "$env:APPDATA\com.chao.windsurf-account-manager\accounts.json" -Force
- 清理 Windows 密钥链中的旧密钥:
# 查找密钥 cmdkey /list | Select-String "WindsurfAccountManager" # 删除密钥 cmdkey /delete:LegacyGeneric:target=MasterKey.WindsurfAccountManager
- 重启应用 - 应用会自动生成新的加密密钥
A: 在设置中配置 HTTP 代理:
- 点击侧边栏的"设置"
- 找到"代理配置"部分
- 输入代理地址和端口
- 点击"测试连接"验证代理是否可用
- 保存设置
A: 这是 Google Firebase 项目新增的 HTTP Referer 限制导致的:
- 错误原因: 所有调用 identitytoolkit.googleapis.com 和 securetoken.googleapis.com 的请求必须携带
Referer: https://windsurf.com/头 - 解决方案: 应用已在所有 Firebase API 调用中添加 Referer 头
- 如果仍然遇到错误: 请确保使用最新版本的应用(v1.6.6+)
- 临时解决: 检查网络环境,某些代理可能会修改 Referer 头
A: 轻量 API 模式使用 GetPlanStatus API 替代 GetCurrentUser API:
- 优点: 减少请求数量,提高响应速度
- 缺点: 获取的信息较少(只有积分和套餐状态)
- 适用场景: 只需要查看积分余额时
- 开启方式: 在设置中勾选"轻量 API 模式"
A: 可能的原因和解决方法:
- 机器 ID 重置失败 - 手动重置 Windows 注册表中的机器 ID
- sessions 数据损坏 - 删除
%APPDATA%\Windsurf\User\globalStorage\state.vscdb文件 - 配置文件错误 - 删除
%APPDATA%\Windsurf\User\globalStorage\storage.json文件 - 重新登录 - 删除数据后重新登录 Windsurf
A: 补丁的安全性说明:
- 只修改 extension.js - 仅移除 180 秒超时限制
- 自动备份 - 打补丁前自动备份原文件(最多保留 3 份)
- 可还原 - 随时可以点击"还原补丁"恢复原始状态
- 开源透明 - 所有代码开源,可以自行审查
A: 在设置中开启"显示详细结果":
- 点击侧边栏的"设置"
- 勾选"显示详细结果"
- 执行操作时会显示完整的 API 响应信息
- 便于调试和问题排查
A: 可能的原因:
- 并发限制 - 批量重置最多支持 5 个并发,超过会失败
- 部分账号失效 - 某些账号密码错误或已被封禁
- 网络不稳定 - 网络波动导致部分请求失败
- API 限流 - 短时间内大量请求触发限流
- 解决方法: 查看操作日志了解具体失败原因,分批执行
A: Devin 账号体系的特点:
- 认证方式 - 使用 auth1_token 和 session_token
- Token 管理 - session_token 没有显式过期时间,使用 32 天占位机制
- 刷新机制 - 基于 401 错误触发强制刷新
- 多组织支持 - 支持多组织账号管理
- 关键字段 - 自动补充 product 参数等关键字段
A: 使用推荐码的步骤:
- 在账号信息对话框中找到"推荐码"字段
- 点击旁边的链接图标复制推荐链接
- 分享链接给好友注册
- 好友注册后双方各获得 25,000 PROMPT 积分
A: 当前支持的版本:
- Windsurf 标准版 - 完整支持官方 Windsurf 客户端
- Windsurf - Next - 支持 Next 版本的独立配置与管理
- 自动检测 - 应用会自动识别并适配不同版本
A: 迁移步骤:
- 备份原电脑的
accounts.json文件 - 备份 Windows 密钥链中的密钥(使用
cmdkey /list) - 在新电脑上安装应用
- 恢复
accounts.json文件 - 恢复密钥链密钥(使用
cmdkey /add) - 启动应用验证
A: 数据隐私说明:
- 本地存储 - 所有数据仅存储在本地
- 不上传 - 不上传任何信息到服务器
- 开源透明 - 代码完全开源,可以自行审查
- 加密保护 - 敏感信息使用 AES-256-GCM 加密
A: 更新方法:
- 访问项目 GitHub Releases 页面
- 下载最新版本的安装包
- 卸载旧版本(可选)
- 安装新版本
- 数据会自动保留
A: 反馈渠道:
- GitHub Issues - 在项目 GitHub 页面提交 Issue
- 交流群 - 扫描 README 中的二维码加入交流群
- 邮件 - 发送邮件给开发者
- 反馈时请提供:错误信息、操作步骤、系统版本
欢迎提交 Issue 和 Pull Request!
- Fork 项目 - 点击 GitHub 页面右上角的 Fork 按钮
- 克隆仓库 -
git clone https://github.com/your-username/windsurf-account-manager-simple.git - 创建分支 -
git checkout -b feature/your-feature-name - 安装依赖 -
npm install - 开发调试 -
npm run tauri dev - 提交更改 -
git commit -m "Add your feature" - 推送分支 -
git push origin feature/your-feature-name - 创建 PR - 在 GitHub 页面创建 Pull Request
前端代码:
- 使用 TypeScript 严格模式
- 遵循 Vue 3 Composition API 风格
- 组件命名使用 PascalCase
- 函数命名使用 camelCase
- 常量命名使用 UPPER_SNAKE_CASE
后端代码:
- 遵循 Rust 官方代码风格
- 使用
cargo fmt格式化代码 - 使用
cargo clippy检查代码 - 函数命名使用 snake_case
- 类型命名使用 PascalCase
提交信息格式:
<type>(<scope>): <subject>
<body>
<footer>
类型(type):
feat: 新功能fix: 修复 bugdocs: 文档更新style: 代码格式调整refactor: 重构test: 测试相关chore: 构建/工具相关
示例:
feat(api): add GetTeamCreditEntries API support
- Add GetTeamCreditEntries command
- Add credit history dialog component
- Update API integration documentation
Closes #123
Tauri v2 使用 ACL (Access Control List) 系统管理权限,每个插件命令都需要在 capabilities 中明确授权。
权限配置文件:src-tauri/capabilities/default.json
常用权限示例:
{
"permissions": [
"core:default",
"opener:default",
"dialog:default",
"dialog:allow-open", // 允许打开文件/文件夹选择对话框
"dialog:allow-save", // 允许保存文件对话框
"dialog:allow-message", // 允许显示消息对话框
"dialog:allow-ask", // 允许询问对话框
"dialog:allow-confirm" // 允许确认对话框
]
}权限命名格式:
plugin:command- 插件命令plugin:allow-command- 允许执行的插件命令
注意事项:
- 如果遇到
Command plugin:dialog|open not allowed by ACL错误,需要在 capabilities 中添加相应权限 - 权限名称格式必须严格遵循规范
- 更新
src-tauri/tauri.conf.json中的版本号 - 运行
node scripts/sync-version.js同步其他文件 - 更新 README.md 中的版本历史
- 提交更改并打标签:
git add . git commit -m "release: version x.x.x" git tag -a vx.x.x -m "Release version x.x.x" git push origin main git push origin vx.x.x
- 在 GitHub 创建 Release
AGPL-3.0
本工具仅供学习和个人使用,请遵守 Windsurf 服务条款。作者不对因使用本工具产生的任何问题负责。
Windsurf Account Manager - Simple 是一个功能完善的 Windsurf 多账号管理桌面应用,采用 Tauri + Vue 3 + Rust 技术栈开发。项目自 2025 年底开始开发,经过多个版本的迭代,已经实现了以下核心功能:
- ✅ 完整的账号管理(CRUD、分组、标签)
- ✅ 积分重置(单账号、批量、自动)
- ✅ 团队管理(成员管理、邀请、移除)
- ✅ 一键换号(标准换号、无感换号补丁)
- ✅ 账单查询(订阅状态、支付信息)
- ✅ 使用分析(每日统计、工具使用、模型使用)
- ✅ 订阅支付(虚拟卡生成、隐私支付)
- ✅ 数据安全(AES-256-GCM 加密、系统密钥链)
- 🏗️ 清晰的分层架构(命令层、服务层、数据层)
- 🔒 完善的安全机制(加密存储、认证流程、隐私保护)
- ⚡ 高性能优化(异步并发、Token 复用、轻量 API)
- 🎯 多客户端支持(Windsurf 标准版、Windsurf - Next)
- 🤖 Devin 账号体系完整支持(auth1_token、session_token)
- v1.6.x: 基础功能完善、订阅支付、分析数据优化
- v1.7.0: 计费策略与配额详情支持、OperationType 扩展
- v1.7.1: 多客户端支持(Windsurf 和 Windsurf - Next)
- v1.7.2: Devin 账号体系完整支持
- v1.7.3: Devin 刷新逻辑修复、关键字段回填
- 支持 Linux 和 macOS 平台
- 添加更多数据分析图表
- 支持自定义 API 端点
- 添加自动化测试
- 优化 UI/UX 设计
感谢以下开源项目和服务:
- Tauri - 现代化的桌面应用开发框架
- Vue.js - 渐进式 JavaScript 框架
- Element Plus - 基于 Vue 3 的组件库
- Rust - 系统编程语言
- Reqwest - Rust HTTP 客户端
- Windsurf - AI 编程助手
感谢所有贡献者和用户的反馈与支持!
- GitHub: [项目地址]
- 作者: chaogei666
- 许可证: AGPL-3.0
最后更新: 2026-04-20 文档版本: 1.7.3




