星火无痕: Windsurf アカウントプール管理ツールを自作する
星火无痕は Windsurf アカウントを管理する Electron デスクトップアプリだ。アカウントが増えてくると切り替えは完全に手作業で、有効期限、残り枠、どれがまだ使えるかを全部頭で覚えておくことになり、遅かれ早かれ破綻する。そこで集中管理ツールにまとめた。一括登録、インポート/エクスポート、グループ分け、検索、切り替えを全部ひとつのクロスプラットフォームアプリに詰め込んである。
核心は無感切り替えで、付属の拡張と組み合わせればエディタ内で再起動せずそのまま切り替えられ、枠を使い切ると自動で次へ飛ぶ。さらにクォータのポーリング、メッセージアンカーによる切り替え、ショートカットでの切り替えにも対応していて、以前は手動でやっていたことがほぼ放置で済むようになった。使用統計も可視化してあり、枠・クレジット・リクエストの推移がパネルに並ぶので、どのアカウントが底をつきそうか一目でわかる。このリポジトリに置いてあるのはアプリ本体のソースで、正式なインストーラにするには Electron ランタイムのシェルとパッケージング設定が別途必要になるが、その部分は入れていない。現在は v8.4.8 でまだ反復中だ。
構成は標準的な Electron の三層構造だ。メインプロセス main.js がウィンドウを作り、すべての IPC handler を登録し、システム機能を統合し、ついでにバージョン検出とメンテナンスモードも管理する。ひとつ落とし穴があって、起動時に HTTP_PROXY のようなプロキシ環境変数を隔離しておかないと、内部リクエストに紛れ込んで悪さをする。レンダラープロセス renderer.js はすべて ipcRenderer.invoke 経由でメインプロセスに機能を要求する。バックエンドの src/ では、登録ボット・使い捨てメール・マシンコードリセットをそれぞれ別モジュールに分けてある。
バージョン認証、登録中継、ストアはすべてリモート側に投げていて、クライアントは素直に HTTP で通信する。エンドポイントのアドレス、Worker キー、Firebase Key は js/constants.js にまとめてあり、ランタイムデータはユーザーディレクトリの .xinghuowindsurf/shared-data に書き込む。技術スタックは Electron 26 がベースで、認証コードの取得は axios・cheerio・puppeteer / puppeteer-real-browser に chrome-launcher を加え、使い捨てメールは imap + mailparser、ローカルストレージは sql.js。全体でだいたい六万行の JS だ。
認証コードの取得がいちばん厄介で、使い捨てメールを何社か内蔵し、IMAP・API・Puppeteer でのスクレイピングを全部書いてある。単一チャネルだと不安定すぎるので、互いを補い合う予備を残しておく必要があるからだ。あと小さな自己修復 patch もあって、保存したプロンプトにリテラルの \n がよく混入するので、起動のたびについでに本物の改行へ直している。直さないと使っていて気持ち悪いからだ。マシンコードリセット、登録ボット、TOTP 付きの GitHub OAuth といった補助機能は、どれも自分に必要だったから足しただけだ。
npm install
npm run check # 逐文件 node --check 语法检查 跳过 node_modules 和 vendor
npm start # electron . 直接起
Node 18+、20+ 推奨。MIT ライセンス、ソースは上のリポジトリにあるので、自分で覗いてくれ。